使用带有通配符的del方法,排除特定文件

时间:2014-03-18 22:40:31

标签: batch-file

我正在尝试编写一个.bat文件来删除目录中的所有文件,这些文件看起来像“r”连接了一些带有.sas7bdat结尾的不确定长度。

例如:r2343.sas7bdat,r2309483.sas7bdat等。

问题是,我还有一个名为“ranker_interface.sas7bdat”的文件,所以我不能这样做:

del“C:\ temp \ r * .sas7bdat”

我尝试过谷歌上下搜索,但我无法弄明白。有没有办法从通配符中排除特定值?

3 个答案:

答案 0 :(得分:1)

for /L %%a in (0,1,9) do ECHO del r%%a*.sas7bdat

可能是最简单的。

为了测试目的,所需的DEL命令仅为ECHO在您确认命令正确后,将ECHO DEL更改为DEL以实际删除文件。

如果您是直接从提示而不是批处理文件中的一行运行此操作,请将所有%%a更改为%a

答案 1 :(得分:0)

要列出文件夹中与'r * .sas7bdat'相同的所有文件,请从列表中排除名为ranker_interface.sas7bdat的文件,并删除其余文件,您可以在批处理文件中使用此命令:

    for /f "tokens=*" %%a in ('dir /b r*.sas7bdat ^| find /v "ranker_interface.sas7bdat"') do del /f /q %%a

编写直接从文件夹执行的方式。 这将删除所有'r * .sas7bdat',但是find /v指定的那个 - 排除,最后可能会被另一个find /v排除,例如:

    for /f "tokens=*" %%a in ('dir /b r*.sas7bdat ^| find /v "ranker_interface.sas7bdat" ^| find /v "rxxxxx.sas7bdat"') do del /f /q %%a

如果要排除多个文件,则不是最好的方法。如果要排除多个文件,则可以将排除的文件名放入singel文件中,而不是直接运行del命令进一步for后跟if语句可以完成并比较该文件是否可以在排除列表文件中找到,每行包含文件名。批处理可以如下所示:

    @echo off
    for /f "tokens=*" %%a in ('dir /b r*.sas7bdat') do (
       for /f "tokens=*" %%x in ('type exclusion.txt ^| find /c "%%a"') do (
          if "%%x" EQU "0" (del /f /q %%a)
       )
    )

这将删除目录中所有类似'r * .sas7bdat'的文件,但文件'exclusion.txt'中列出的文件除外

希望这有帮助

答案 2 :(得分:0)

这是旧学校的MSDOS解决方法:

attrib +h "C:\temp\ranker*.sas7bdat"
del "C:\temp\r*.sas7bdat"
attrib -h "C:\temp\ranker*.sas7bdat"

attrib命令隐藏了您不想从DEL命令中删除的文件,
然后再次取消隐藏它们。