我有一个任务分配给我,我知道如何使用其他语言,但Windows批处理/ cmd要求让我有点困惑。
有一个包含多个文件的目录:
同样的模式可能会一直重复到FileName54.txt,依此类推。另外请记住,我已经出于各种原因简化了示例,但名称的格式是相同的。
基本上有主文件(FileName0.txt,FileName1.txt等),然后是早期的截断文件(FileName1-2014.txt,FileName1-2013.txt等),每个设置的数字都可以是0无论如何......我见过的最高的是54但可能会改变。
我需要做的是有一个批处理/ cmd文件,它将保留所有FileName0 * .tx文件,其他数字序列的主文件(FileName1.txt,FileName2.txt等),然后删除所有除FileName0集之外的任何序列的其他截断文件。
我认为我可以专注于" - "在序列号之后,所以基本上删除了FileName1 - * .txt,但是试图找出一种系统的方法来使所有序列都能在0以上工作让我感到困惑。
思想/评论/实例
答案 0 :(得分:1)
滥用访问权限的丑陋方式:
attrib +r FileName0*.txt
del FileName*-*.txt
attrib -r FileName0*.txt
更好的方式:
for /L %i in (1,1,999) DO del FileName%i-*.txt
答案 1 :(得分:0)
@ECHO OFF
SETLOCAL
FOR %%a IN (filenames*.txt) DO FOR /f "tokens=1,2delims=-" %%s IN ("%%a") DO IF "%%t"=="" SET "keep=%%~na"&GOTO nextstep
:nextstep
ECHO keep %keep%*
FOR %%a IN (filenames*-*.txt) DO FOR /f "tokens=1,2delims=-" %%s IN ("%%a") DO IF "%%s" neq "%keep%" ECHO DEL "%%a"
GOTO :EOF
为了测试目的,所需的DEL命令仅为ECHO
。 在您确认命令正确后,将ECHO DEL
更改为DEL
以实际删除文件。
(我已将模板更改为filenameS
以适合我的测试)
答案 2 :(得分:0)
for /f "delims=" %%f in (
'dir /a-d /b *.txt ^| findstr /r /c:"FileName[1-9][0-9]*-"'
) do echo del "%%~ff"
过滤文件列表以仅检索所需文件。