使用Java工具unluac的拖拽lc转lua batch脚本文件名异常求助
问题根源
你原脚本的故障由以下几个常见Batch语法错误导致:
- 变量赋值时等号两侧不能加空格,你写的
set o = %%~ni会实际生成名为o(带末尾空格)的变量,值为%%~ni(带开头空格),调用%o%自然返回空 - 直接用
%1拼接后缀,%1本身是带.lc后缀的完整文件名,自然会生成xxx.lc.lua的格式 - 字符串截取语法应用场景错误,不需要手动截后缀,Batch的参数扩展符原生支持提取无后缀文件名
- 原for循环逻辑冗余,还错误混用了路径遍历参数,实际未生效
修复后完整代码
@echo off setlocal enabledelayedexpansion :: 遍历所有拖拽传入的文件,支持批量拖拽多个lc文件 for %%f in (%*) do ( :: 只处理后缀为.lc的文件 if /i "%%~xf"==".lc" ( :: %%~dpnf 提取文件的盘符+路径+文件名(不含后缀) set "output_file=%%~dpnf.lua" echo 正在转换:%%f echo 输出路径:!output_file! java -jar "%~dp0unluac_2021_08_29b.jar" "%%f" > "!output_file!" ) ) echo 所有转换任务执行完毕 pause
关键逻辑说明
- 用
%*获取所有拖拽传入的文件路径,原生支持批量拖拽多个文件处理 - 用参数扩展符
%%~xf提取文件后缀,判断只处理.lc格式文件,避免误操作其他文件 - 用参数扩展符
%%~dpnf直接提取对应文件的「盘符+路径+无后缀文件名」,直接拼接.lua即可得到正确的输出文件名,不需要手动做字符串截取 - 开启
enabledelayedexpansion延迟变量扩展,循环内用!变量名!调用变量,避免循环内变量赋值不生效的问题 - 变量赋值用
set "变量名=值"的格式,用引号包裹避免多余空格被写入变量值
内容的提问来源于stack exchange,提问作者V E L Δ
相关产品推荐
相关产品推荐

