Tim*_*m C 10 command-line dos batch-file
我需要使用命令行从文件夹及其所有子文件夹中删除某种类型的文件(例如.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
Run Code Online (Sandbox Code Playgroud)
注意:您可以调整此脚本,以便不仅忽略子文件夹而且忽略给定类型的所有文件:
attrib /S *.xxx +r > NUL
Run Code Online (Sandbox Code Playgroud)
实际上将帮助您排除当前目录和所有子目录的所有"xxx"文件(因此/S选项).
注意:" > NUL"部分是一个重定向,通常用于隐藏标准输出,而不是在屏幕上显示.
如果使用过于频繁(在大环与涉及不同的路径,例如),因为它是一个也可以是危险的设备,和类似的所有设备(AUX,COMn,LPTn,NUL和PRN):
NULin,say,C:\之后再次使用它C:\TEMP,则会丢失另一个文件句柄.