用.bat文件实现批量删除开头相同的文件夹

匿名
2021-03-03T07:22:34+00:00

现在想用.bat文件实现批量删除一个路径下所有开头相同文件夹的功能。

例:删除C盘下所有以2020开头的文件夹

我写的指令为:rd "C:\2020*"

我认为该指令逻辑没有问题,但是功能没有实现。

所以.bat程序中对于文件夹的名字,能使用“*”作为通配符吗?

如果能,应该如何使用;如果不能,有何替代方案?

Windows 家庭版 | 以前的 Windows 版本 | 文件、文件夹和存储

锁定的问题。 此问题已从 Microsoft 支持社区迁移。 你可投票决定它是否有用,但不能添加评论或回复,也不能关注问题。

0 个注释 无注释
{count} 票
问题作者接受的答案
  1. 匿名
    2021-03-03T13:10:27+00:00

    Q:所以.bat程序中对于文件夹的名字,能使用“*”作为通配符吗?

    A:您好,参数中是否可以使用通配符,取决于命令本身的参数是否支持通配符。

    这是rd命令的帮助信息:

    删除一个目录。

    RMDIR [/S] [/Q] [drive:]path

    RD [/S] [/Q] [drive:]path

    /S      除目录本身外,还将删除指定目录下的所有子目录和
    
            文件。用于删除目录树。
    
    /Q      安静模式,带 /S 删除目录树时不要求确认
    

    作为对照,这是del命令的帮助信息:

    删除一个或多个文件。

    DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

    ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

    names 指定一个或多个文件或者目录列表。

                通配符可用来删除多个文件。
    
                如果指定了一个目录,该目录中的所
    
                有文件都会被删除。
    

    /P 删除每一个文件之前提示确认。

    /F 强制删除只读文件。

    /S 删除所有子目录中的指定的文件。

    /Q 安静模式。删除全局通配符时,不要求确认

    /A 根据属性选择要删除的文件

    属性 R 只读文件 S 系统文件

                H  隐藏文件            A  准备存档的文件
    
                I  无内容索引文件      L  重新分析点
    
                O  脱机文件            -  表示“否”的前缀
    

    如果命令扩展被启用,DEL 和 ERASE 更改如下:

    /S 开关的显示句法会颠倒,即只显示已经

    删除的文件,而不显示找不到的文件。

    所以,

    虽然rd "C:\2020*"命令确实符合在CMD命令下的通配符语法,

    但rd命令的path参数本身不支持通配符所以会返回文件名、目录名或卷标语法不正确。

    Q:如果不能,有何替代方案?

    A:虽然rd命令本身不支持通配符,但可以通过cmd的for循环命令的通配符参数补足这个功能的缺失,

    因此,如果要做到您提出的需求,可以执行以下命令:

    注意:数据无价,该命令执行后将会自动删除所有C盘根目录下开头为“2020”的文件,不会移动到回收站

    for /d %i in (C:\2020*) do rd /S /Q "%i"

    命令解释:

    for:循环命令

    /d:遍历所有文件夹

    %i:变量名,循环产生的路径字符将在 do 后面用此代替

    in:for循环命令的语法关键词,用于指示后面将是一个文件集合

    (C:\2020*):文件的集合,可以指定多个路径,这里就可以使用您所熟悉的通配符语法

    do:指示后面将是要循环执行的语句

    rd:删除文件夹

    /S:删除目录下的所有子目录和文件(由于通常文件夹都不是空的,不加这个参数所有的有内容文件夹将会报错,只有空的文件夹才会被删除)。

    /Q:安静模式,删除目录树时不要求确认(考虑到您已经确定要删除此开头的文件夹,且已经到了需要使用批处理的地步,揣测您要删除的文件夹数量应不会少于20个,如果不加这个参数,每当删除非空目录时,批处理将会中断并要求您手动确认是否删除,如果您需要逐个确认,请去除这个参数)

    "%i":要删除的文件夹路径,这里使用了for命令中定义的变量,考虑到目录中可能包含空格,所以需要使用双引号将路径包起,以免因空格导致找不到路径而执行错误。

    注意:在.bat批处理中使用 for 命令时,变量需要双写百分号,请将命令中的 %i 替换为 %%i

    7 个人认为此答案很有帮助。
    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助