Command line 命令行递归删除文件,但不包括某个文件

Command line 命令行递归删除文件,但不包括某个文件,command-line,batch-file,dos,Command Line,Batch File,Dos,我需要使用命令行从文件夹及其所有子文件夹中删除特定类型的文件(.zip文件)。理想情况下,我正在寻找可以在Windows中作为.bat文件运行的东西 我知道DEL命令在子文件夹中查找时有一个a/S开关,但为了增加挑战性,我需要排除特定名称的文件(例如“Backup.zip”) 是否有一种方法可以递归删除文件,但排除特定名称的文件。在我的情况下,只列出我不想删除的匹配类型的文件,显式列出我要删除的所有文件名是不实际的。也许“forfiles”命令会有用 希望对您有所帮助。您可以轻松地循环一组文件

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

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


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

也许“forfiles”命令会有用


希望对您有所帮助。

您可以轻松地循环一组文件并对每个文件执行命令,如下所示:

set match=D:\blah\M*.zip
for %%x in (%match%) do (
del %%x
)
然后我认为您需要阅读这篇关于如何在DOS中操作字符串的文章:

一个很好的把戏:做一个好朋友

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
    ,例如,
    C:\
    ,然后在
    C:\TEMP
    中再次使用它,您将丢失另一个文件句柄

此脚本将删除文件夹(和子文件夹)中的所有.zip文件,但仅当文件名不包含“备份”、“备份”或“备份”等字样时


将在所有级别对文件夹C:/testfolder及其所有子文件夹执行删除操作。

您只需使用以下命令:

forfiles /p C:\temp-new /s /c "cmd /c if @isdir==FALSE del @file"

简单地做这个

  • windows按钮+r
  • 键入
    cmd
    并按enter键
  • 导航到父目录:
    键入
    c:
    d:
    (或要导航到的驱动器的字母)
  • 键入
    dir
    查看该目录内容的列表(
    dir/ah
    查看隐藏文件)
  • 然后要更改目录,请键入
    cd xxxx
    (xxxx=目录名)
  • 重复4和5,直到到达要运行批删除的目录
  • 然后键入您的模式。类似于:
    del/S/ah*.jpg
    并按enter键。它将在所有子目录中运行,并删除所有可见和隐藏的.jpg文件
  • *是一个通配符
    /S从所有子文件夹中删除
    /aha=根据属性选择文件,h=隐藏

    示例:要删除从Mac复制到Windows时出现的恼人的.DS\u存储文件,请运行:

    del/S/ah.DS\u商店

    del/S/ah.


    这将获得从Mac复制到Windows时创建的所有“重复”隐藏文件。

    我还不理解>NUL位,但我喜欢设置属性的想法。干杯有趣!请注意,rd/s您的_目录也会删除系统和隐藏文件
    script "C:/Scripts/DeleteZip.txt" folder("C:/testfolder")
    
    forfiles /p C:\temp-new /s /c "cmd /c if @isdir==FALSE del @file"