我在文件夹download \ gutt_menu_win中有以下文件(来自dir
命令)
27/04/2015 09:02 <DIR> .
27/04/2015 09:02 <DIR> ..
26/08/2013 01:38 274,218 autorun.csp
22/04/2013 18:26 2,120,704 autorun.exe
22/04/2013 18:09 32,038 autorun.ico
03/11/2009 04:34 350 disclaimer.txt
22/04/2013 18:26 2,120,704 gutt_v1.0.0.exe
27/04/2015 09:02 277 list.txt
05/11/2012 20:57 957 readme.txt
27/04/2015 08:57 <DIR> software
27/04/2015 08:57 <DIR> website
7 File(s) 4,549,248 bytes
4 Dir(s) 33,154,744,320 bytes free
当我通过.bat文件运行以下命令时
for %%i in (download\%sku%_menu_win\*.*) do if not %%i == %sku%_v*.exe del %%i
它会删除文件夹中的所有文件,但我希望它删除除gutt_v1.0.0.exe文件以外的所有文件。
我之前正在将%sku%
变量提供给批处理,并且它正在其他地方工作,所以这似乎不是问题所在。
该命令也不会删除文件夹中的隐藏(autorun.inf)文件,但我已使用其他命令更正了该文件:
DEL /a:h /q download\%sku%_menu_win\autorun.inf
我哪里错了?
答案 0 :(得分:1)
您不能在IF语句中使用通配符。
一个简单的解决方案是切换到FOR / F循环,迭代DIR / B管道传输到FINDSTR的结果。 / V开关排除匹配的字符串。
pushd "download\%sku%_menu_win"
for /f "eol=: delims=" %%F in (
'dir /b /a-d^|findstr /v "^%sku%.*\.exe$"'
) do del "%%F"