想象一下,我们有以下文件的目录c:\test :
first.txt second.doc third.txt fourth.txt_bak
我只想删除txt文件,但是保留doc和txtwhatever不变。
当我运行命令del c:\test\*.txt ,它会删除除了第二个文件的一切。
任何想法如何解决,只删除txt文件?
编辑 :我不知道客户将如何命名他们的文件。 后缀可以是任何东西,不仅仅是txt_something 。 它也可能是txtsomething , txt-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"
供参考使用: