我需要使用命令行从文件夹及其所有子文件夹中删除某种类型的文件(例如.zip文件).理想情况下,我正在寻找可以在Windows中作为.bat文件运行的东西.
我知道DEL命令有/ S开关可以查看子文件夹,但要添加到挑战中我需要排除某个名称的文件("Backup.zip"作为示例).
有没有办法递归删除文件但排除某个名称的文件.在我的情况下,明确列出我要删除的所有文件名是不切实际的,只有我不想删除的匹配类型的文件.
一个很好的技巧:将要排除的文件设为只读!
DEL /S
不会删除只读文件.
以下脚本并不完全符合您的要求(请参阅下面的我的评论),但向您展示了如何使用只读文件来避免删除.
@ECHO OFF :: This example supposes your first parameter is :: the relative path to the folder to be deleted :: and the second is the relative path (from the :: the target folder) of the one to be excluded :: Notice that this will only work if the folders :: are in the working drive, if not, you ll :: have to specify full paths IF "%1"=="" GOTO ERROR IF "%2"=="" GOTO ERROR IF NOT EXIST %1\NUL GOTO ERROR CD %1 IF NOT EXIST %2\NUL GOTO ERROR ECHO Starting up the deletion process ECHO. * Setting attributes attrib %1\*.mp3 -r -s -h > NUL attrib %2\*.mp3 +r > NUL ECHO. * Deleting files del /s %1\*.mp3 ECHO. * Reseting attributes attrib %2\*.mp3 -r > NUL ECHO. ECHO Operation completed! ECHO. GOTO END :ERROR ECHO Parameters: ECHO. Param1 -> target folder ECHO. Param2 -> folder to be ignored ECHO. GOTO END :END
注意:您可以调整此脚本,以便不仅忽略子文件夹而且忽略给定类型的所有文件:
attrib /S *.xxx +r > NUL
实际上将帮助您排除当前目录和所有子目录的所有"xxx"文件(因此/S
选项).
注意:" > NUL
"部分是一个重定向,通常用于隐藏标准输出,而不是在屏幕上显示.
如果使用过于频繁(在大环与涉及不同的路径,例如),因为它是一个也可以是危险的设备,和类似的所有设备(AUX
,COMn
,LPTn
,NUL
和PRN
):
打开设备将声明一个文件句柄.但是,与文件不同,设备在重新启动之前永远不会关闭.
每个设备都存在于每个驱动器上的每个目录中,因此如果您使用重定向到NUL
in,say,C:\
之后再次使用它C:\TEMP
,则会丢失另一个文件句柄.