del * .txt也删除file.txt_backup

想象一下,我们有以下文件的目录c:\test

 first.txt second.doc third.txt fourth.txt_bak 

我只想删除txt文件,但是保留doctxtwhatever不变。

当我运行命令del c:\test\*.txt ,它会删除除了第二个文件的一切。

任何想法如何解决,只删除txt文件?

编辑 :我不知道客户将如何命名他们的文件。 后缀可以是任何东西,不仅仅是txt_something 。 它也可能是txtsomethingtxt-something ,等等…

我也不能在服务器上安装任何二进制文件,我只能使用默认的。

也许你可以使用forfiles命令:

 forfiles /p "c:\test" /m "*.txt" /c "cmd /c del @file" 

基于fquinto的想法,但更强大:

 mkdir FilesToSave.AEEC869E-A480-4459-84AE-B20D47A967BC move *.txt?* FilesToSave.AEEC869E-A480-4459-84AE-B20D47A967BC del *.txt move FilesToSave.AEEC869E-A480-4459-84AE-B20D47A967BC\*.* . rmdir FilesToSave.AEEC869E-A480-4459-84AE-B20D47A967BC 

*.txt?*通配符将以* .txt开始的所有扩展名超过3个字符的文件移动到一个临时目录。 这些是8.3个名字以.txt结尾的文件。 因此,在第3行中,您只能删除其真实扩展名为.txt的文件,而在第4行中,您还原的文件已经被意外删除。

GUID在那里使临时目录独特。

快速解决scheme,但不能直接回答你的问题:

重命名* .txt_ * * .nodelete
 del * .txt
重命名* .nodelete * .txt_bakcup

我知道我没有以您想要的方式回答问题,但是…如果您可以使用PowerShell,那么cmdlet Remove-Item将执行您所需的操作。

删除项目* .txt

问候

Alex Rouge

如果我得到你的问题的权利比这些可能会有所帮助:

 @echo off setlocal EnableDelayedExpansion set exclude=.log.sdb.sdk.bat. for %%f in (*.*) do ( if /I "%exclude%" == "!exclude:%%~Xf.=!" del "%%f" ) 

要么

 @echo off forfiles /c "cmd /c if @isdir equ FALSE if /i not @ext==\"sdb\" if /i not @ext==\"sbk\" if /i not @ext==\"log\" if /i not @ext==\"bat\" del @file" 

供参考使用:

https://stackoverflow.com/questions/15401813/how-to-delete-all-files-but-excluding-specific-files-batch-file