Windows 批处理文件-根据文件名中的编号删除文件

Windows 批处理文件-根据文件名中的编号删除文件,windows,batch-file,cmd,Windows,Batch File,Cmd,我有一个任务分配给我,我知道如何用其他语言完成,但是Windows批处理/cmd要求让我有点困惑 有一个包含多个文件的目录: FileName0.txt FileName0-2014.txt FileName0-2013.txt FileName1.txt FileName1-2014.txt FileName1-2013.txt FileName2.txt FileName2-2014.txt FileName2-2013.txt 同样的模式可能会一直重复到FileName54.txt等等

我有一个任务分配给我,我知道如何用其他语言完成,但是Windows批处理/cmd要求让我有点困惑

有一个包含多个文件的目录:

  • FileName0.txt
  • FileName0-2014.txt
  • FileName0-2013.txt
  • FileName1.txt
  • FileName1-2014.txt
  • FileName1-2013.txt
  • FileName2.txt
  • FileName2-2014.txt
  • FileName2-2013.txt
同样的模式可能会一直重复到FileName54.txt等等。还请记住,出于各种原因,我简化了示例,但名称的格式是相同的

基本上有主文件(FileName0.txt、FileName1.txt等),然后是之前的被截断文件(FileName1-2014.txt、FileName1-2013.txt等),每一组数字可以是从0到……我看到的最高值是54,但这可能会改变

我需要做的是创建一个batch/cmd文件,该文件将保留所有FileName0*.tx文件、其他数字序列(FileName1.txt、FileName2.txt等)的主文件,然后删除除FileName0集以外的任何序列的所有其他截断文件

我想我可以把重点放在序列号后面的“-”,所以基本上删除FileName1-*.txt,但试图找出一种系统的方法使其适用于0以上的所有序列让我感到困惑


想法/评论/示例?

滥用访问权限的丑陋方式:

attrib +r FileName0*.txt
del FileName*-*.txt
attrib -r FileName0*.txt
更好的方法是:

for /L %i in (1,1,999) DO del FileName%i-*.txt
@ECHO关闭
SETLOCAL
对于%%a IN(filenames*.txt)DO FOR/f“tokens=1,2 delims=-”%%%s IN(“%%a”)如果“%%t”==”SET“keep=%%~na”&转到下一步
:下一步
回显保留%保留%*
对于(filenames*-*.txt)中的%%a,如果“%%s”neq“%keep%”ECHO DEL“%%a”,则为/f“tokens=1,2delims=-”%%s IN(“%%a”)执行
后藤:EOF
所需的DEL命令仅用于测试目的验证命令是否正确后,将
ECHO DEL
更改为
DEL
,以实际删除文件

(我已将模板更改为
文件名
,以适合我的测试)


筛选文件列表以仅检索所需的文件

需要做更多的测试,但最初的测试看起来很完美!我假设第一行代码是查找所有文件名0,第二行代码是删除除这些之外的所有内容,对吗?“neq”表示不等于右?在所有计数中都是正确的。
for /f "delims=" %%f in (
  'dir /a-d /b *.txt ^| findstr /r /c:"FileName[1-9][0-9]*-"'
) do echo del "%%~ff"