我想知道如何删除每个扩展名的文件(使用批处理脚本),但扩展名为 .bak、.$av 和 .pen 的文件除外
3 回答
在尝试之前,请备份您的文件,这样您就不会永远丢失数据!
注意:使用风险自负,它会大量删除所有内容!
SET /p ExcludeFiles = What file type should be kept (NOT deleted)? Type the file name(s) inside parantheses.
Example: (bak) or ($av pen)
SET /p MapDrive = What drive letter is the folder in?
Example: c or n
SET /p Directory = Drag the folder you would like to modify into this command prompt then press ENTER.
%MapDrive%:
cd %Directory%
attrib +a *.* /s
echo %date%
for %%i in %ExcludeFiles% do attrib -a *.%%i /s
echo %date%
del %Directory%\*.* /s /a:a /q
echo %date%
attrib +a %Directory%\*.* /s
echo %date%
您没有指定要使用的操作系统或脚本语言,这会有所帮助。
然而,这里是一种通用类型的脚本,用相当通用的术语来说。
一种相当通用的方法是创建一个子文件夹,将要保留的文件复制或移动到子文件夹中,删除要清除的文件夹中的所有文件,然后将保存在子文件夹中的文件移回原始文件夹。
大多数删除文件类型的命令旨在让您指定要删除的文件,而不是您不想删除的文件。
实际上,对于这个问题,我现在想知道为什么这不是删除命令的一个很好的扩展。
现在,如果您需要执行文件树删除意味着遍历文件目录层次结构以删除您想要保留的文件之外的文件,那将更加困难。一种方法是遍历文件树并对每个目录执行相同的操作。
另一种选择是生成文件夹中所有文件的列表,并使用诸如 sed 之类的实用程序来修改文件列表,以便您创建一个临时脚本,然后执行该脚本。该脚本将由实用程序修改,以便从列表中删除您想要保留的那些文件,并且您想要删除的文件将在列表中修改该文件名的行以执行删除。
不过,在部署动态脚本执行方法之前,我肯定会做一些认真的测试。
使用 FINDSTR 忽略具有特定扩展名的文件名。将 DIR /B 的结果通过管道传输到 FINDSTR 并使用 FOR /F 处理结果。
for /f "eol=: delims=" %%F in ('dir /b /a-d^|findstr /vire "\.bak \.\$av \.pen"') do @del "%%F"
如果从命令行运行,则更%%F
改为%F
.