You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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 Δ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:06:01