为什么这个FOR命令不会删除除我要保留的文件以外的所有文件?

时间:2015-04-27 08:12:19

标签: windows batch-file for-loop

我在文件夹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

我哪里错了?

1 个答案:

答案 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"