Bat脚本 常见问题
变量在括号内不更新
问题:在 if 或 for 的括号内修改变量,使用 %var% 引用时值不更新。
解决:启用延迟扩展 setlocal enabledelayedexpansion,使用 !var! 引用。
@echo off
setlocal enabledelayedexpansion
set count=0
for %%i in (1 2 3) do (
set /a count=!count!+1
echo !count!
)
路径包含空格
问题:路径中包含空格时命令会报错。
解决:用双引号包围路径。
@echo off
:: ❌ 错误
copy C:\Program Files\app.exe D:\
:: ✅ 正确
copy "C:\Program Files\app.exe" "D:\"
:: 注释在括号内报错
问题:在 if 或 for 的括号内使用 :: 注释会导致脚本报错。
解决:括号内统一使用 REM 注释。
if 1==1 (
REM ✅ 正确
echo 正常执行
)
if 1==1 (
:: ❌ 错误(可能导致脚本崩溃)
echo 可能不会执行
)
for 循环变量名冲突
问题:for 的循环变量不要使用 %0 ~ %9,这些是预留给脚本参数的。
:: ❌ 避免使用 %0
for %%0 in (*) do echo %%0
:: ✅ 使用字母
for %%i in (*) do echo %%i
等号两侧加空格导致变量值异常
@echo off
:: ❌ 错误:变量值包含空格
set name = 张三
echo "%name%" :: 输出 ""(变量名变成了 "name ")
:: ✅ 正确:等号两侧无空格
set name=张三
echo %name% :: 输出 "张三"