报错类型
- The system cannot find the file specified.
- The syntax of the command is incorrect.
- 等等
场景
我没学过bat文件的编写,而我刚好有chatgpt,所以我让chatgpt帮我写了一段重命名文件的代码。
反复调整后,代码大概如下:
@echo off
chcp 65001
REM 获取最新的 flac文件
for /f %%i in ('dir /b /od *flac') do (
set latest_flac=%%i
)
REM 重命名最新的输出 WAV 文件
if defined latest_flac (
set new_name=output_.flac
ren %latest_flac% %new_name%
)
pause
但是运行的时候一直报上面提到的各种错,最终反复拷打chatgpt后,才知道是因为:
循环中使用变量时,为了在块内部正确地访问变量的值,需要启用延迟扩展Delayed Expansion
chatgpt给出的解决方案是:
@echo off
setlocal enabledelayedexpansion
chcp 65001
REM 获取最新的 flac 文件
for /f %%i in ('dir /b /od *flac') do (
set latest_flac=%%i
)
REM 重命名最新的输出 WAV 文件
if defined latest_flac (
set new_name=output_.flac
ren !latest_flac! !new_name!
)
pause
但是我没试它这个,因为我看不懂。。。
既然是因为在“块内部”的问题,我就试了把if defined latest_flac
去掉,因为这是刚刚遍历出来的,应该不用判断吧。不知道这样对不对,反正运行结果对了。
@echo off
chcp 65001
REM 获取最新的 flac文件
for /f %%i in ('dir /b /od *flac') do (
set latest_flac=%%i
)
REM 重命名最新的输出 WAV 文件
set new_name=output_.flac
ren %latest_flac% %new_name%
pause
然而当我再写更复杂的循环判断时候就没用了,所以我最后也只好按照chatgpt的方法了。
总结就是:
- 设置setlocal enabledelayedexpansion
- 块内用变量的地方就改用“!”(我猜是这样)