我正在尝试编写一个.bat文件来删除目录中的所有文件,这些文件看起来像“r”连接了一些带有.sas7bdat结尾的不确定长度。
例如:r2343.sas7bdat,r2309483.sas7bdat等。
问题是,我还有一个名为“ranker_interface.sas7bdat”的文件,所以我不能这样做:
del“C:\ temp \ r * .sas7bdat”
我尝试过谷歌上下搜索,但我无法弄明白。有没有办法从通配符中排除特定值?
答案 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命令中删除的文件,
然后再次取消隐藏它们。