Windows 批处理脚本问题 FOR 循环使用具有通配符的变量

问题描述 投票:0回答:1

我在 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=,”,将设置更改为使用空格而不是 ,

感谢您的建议

batch-file
1个回答
0
投票

解决了这个问题。总之,路径与使用的通配符很重要。在我的批处理中,当执行此代码时,脚本位于 %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%
© www.soinside.com 2019 - 2024. All rights reserved.