我在 Windows 批处理脚本中遇到一个 for 循环问题,暂时困扰着我。
以下是问题代码的简化示例:
set dellist=blah.txt,BIN\debug_*.exe,BIN\test.txt,driv\??PE
for %%a in (%dellist%) do (
echo deleting %%a
rem other code
)
执行此操作时,dellist 中包含通配符的任何值 <* or ?> 不会在“do ( )”部分中处理。
生成的输出是:
deleting blah.txt
deleting BIN\test.txt
我玩过 EnabledDelayedExpansion,使用 for /f“delims=,”,将设置更改为使用空格而不是 ,
感谢您的建议
解决了这个问题。总之,路径与使用的通配符很重要。在我的批处理中,当执行此代码时,脚本位于 %dellist% 中的文件夹字符串所在的下面 2 个目录。该脚本可以找到列出的特定文件,但没有完整路径,但是当使用通配符时,它找不到它们。简化的解决方案是在 if 语句之前将 cd 添加到脚本中,使其位于这些路径工作的目录中。这是代码更改:
cd sql\compiled
set dellist=blah.txt,BIN\debug_*.exe,BIN\test.txt,driv\??PE
for %%a in (%dellist%) do (
echo deleting %%a
del /f "%PKGDIR%\SQL\compiled\%%a"
)
cd %PKGDIR%