当前位置:  开发笔记 > 编程语言 > 正文

命令行以递归方式删除文件但排除某个文件

如何解决《命令行以递归方式删除文件但排除某个文件》经验,为你挑选了1个好方法。

我需要使用命令行从文件夹及其所有子文件夹中删除某种类型的文件(例如.zip文件).理想情况下,我正在寻找可以在Windows中作为.bat文件运行的东西.

我知道DEL命令有/ S开关可以查看子文件夹,但要添加到挑战中我需要排除某个名称的文件("Backup.zip"作为示例).

有没有办法递归删除文件但排除某个名称的文件.在我的情况下,明确列出我要删除的所有文件名是不切实际的,只有我不想删除的匹配类型的文件.



1> VonC..:

一个很好的技巧:将要排除的文件设为只读!

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,NULPRN):

打开设备将声明一个文件句柄.但是,与文件不同,设备在重新启动之前永远不会关闭.

每个设备都存在于每个驱动器上的每个目录中,因此如果您使用重定向到NULin,say,C:\之后再次使用它C:\TEMP,则会丢失另一个文件句柄.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有