bat批处理这东西非常古老了,使用也不多,但在一些简单任务上,还是个不错的可选项,然而坑实在不少。
变量延迟扩展 enabledelayedexpansion
setlocal enabledelayedexpansion, 设置本地为启用延迟扩展,关键点是如下的原理:
批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。
这很坑,一不留神就中招,还一时半会儿看不出原因。
参看 https://www.cnblogs.com/ydhliphonedev/archive/2012/09/25/2702092.html 或 https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/setlocal
Last Updated on 2025/03/06