del *.txt 还会删除 file.txt_backup

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等等……

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

答案1

也许你可以使用福尔菲斯命令 :

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

答案2

基于 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?*将所有扩展名超过 3 个字符且以 *.txt 开头的文件移动到临时目录。这些文件的名称以 8.3 格式以 .txt 结尾。因此,在第 3 行中,您只删除了真实扩展名为 .txt 的文件,在第 4 行中,您恢复了可能被意外删除的文件。

GUID 的作用是使临时目录变得唯一。

答案3

快速解决方案,但没有直接回答您的问题:

重命名 *.txt_* *.nodelete
删除 *.txt
重命名 *.nodelete *.txt_bakcup

答案4

如果我正确解决了你的问题,那么这些可能会有所帮助:

@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-clusion-specific-files-batch-file

相关内容