gpt4 book ai didi

command-line - 命令行以递归方式删除文件,但排除某些文件

转载 作者:行者123 更新时间:2023-12-04 03:10:17 25 4
gpt4 key购买 nike

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

我知道DEL命令有一个/S开关可以在子文件夹中查找,但是要增加挑战,我需要排除特定名称的文件(例如“Backup.zip”)。

有没有一种方法可以递归删除文件,但排除特定名称的文件。在我的情况下,明确列出要删除的所有文件名,仅列出我不想删除的匹配类型的文件,这是不切实际的。

最佳答案

一个不错的技巧:制作files you want to exclude read-only!
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”部分是 redirection ,通常用于隐藏标准输出,而不是在屏幕上显示。
如果使用得过于频繁(例如,在涉及不同路径的大型循环中)可能会很危险,因为它是 设备,并且像所有设备( AUXCOMnLPTnNULPRN)一样:
  • 打开设备将声明一个文件句柄。但是,与文件不同的是,设备在重启之前永远不会关闭。
  • 每个设备都存在于每个驱动器上的每个目录中,因此,如果您使用重定向到NUL中的C:\,然后在C:\TEMP中再次使用它,则会丢失另一个文件句柄。
  • 关于command-line - 命令行以递归方式删除文件,但排除某些文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/536109/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com