【问题标题】:batch to delete subfolders of all subfolders批量删除所有子文件夹的子文件夹
【发布时间】:2018-06-30 04:59:06
【问题描述】:

所以我目前正在尝试定期删除由程序创建的一堆子文件夹,因为它会重新创建子文件夹。我知道如何安排批处理文件,现在我的问题是如何有效地创建批处理文件。澄清一下,假设我有一个名为D:\IGSG 的目录。 D:\IGSG 中有 250 个文件夹,每个文件夹中有一个名为 D:\IGSG\F252341\arg 的文件夹。我想从我拥有的所有 ~250 个 F 文件夹中删除所有 \arg 文件夹,而不删除 F 文件夹中的其他文件。目前,我所知道的唯一方法是批量生产

cd D:\IGSG\F252341 del /Q arg

并为每个子文件夹重复这些行,但是为其中的每个文件夹输入这些文件夹名称会很乏味,尤其是考虑到不时创建新文件夹。所以我正在寻找一种方法来批量删除子文件夹的子文件夹,而不删除其他文件,如果这有意义的话。

【问题讨论】:

标签: batch-file cmd


【解决方案1】:

在 cmd 行for /d /r X:\path 结合通配符将枚举所有文件夹名称arg 附加的.? 满足此要求:

for /d /r D:\IGSG %A in (arg.?) do @echo rd /s /q "%A" 

如果输出看起来正确,请删除回声。

在批处理文件中,将 % 符号加倍 -> %%A

@Echo off
for /d /r D:\IGSG %%A in (arg.?) do echo rd /s /q "%%A"

批处理/cmd 行可以与 PowerShell 竞争的罕见情况之一。

【讨论】:

    【解决方案2】:

    此 PowerShell 脚本将递归遍历子目录结构并删除 arg 目录中的所有文件和子目录。请务必将 IGSG 目录的位置更改为您的位置。如果您对删除正确的文件感到满意,请从 Remove-Item cmdlet 中删除 -WhatIf

    Get-ChildItem -Directory -Recurse -Path 'C:\src\t\delsubs\IGSG\F*' -Filter 'arg' |
        Remove-Item -Path {(Join-Path -Path $_.FullName -ChildPath '*')} -Recurse -Force -WhatIf
    

    如果您需要从 cmd.exe shell 运行它,请将上面的代码放入名为“dodel.ps1”的文件中并使用以下命令运行:

    powershell -NoProfile -File .\dodel.ps1
    

    【讨论】:

    • 由于 Remove-Item 接受管道输入,因此可以避免 ForEach,您只需将 -Path 参数放在 {脚本块} 中。批处理/cmd 行可以竞争的罕见情况之一
    • @LotPings - 感谢您的建议。我已经尝试了几件事,但还没有得到它。您建议如何编写 Remove-Item 行?
    • @LotPings - 很棒的建议。它正在进入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2014-02-10
    • 2017-05-24
    相关资源
    最近更新 更多