【问题标题】:Delete folder recursively from a specified path, conditionally有条件地从指定路径递归删除文件夹
【发布时间】:2015-02-15 20:14:22
【问题描述】:

我想从 cmd 文件下的特定路径递归删除一个文件夹及其内容。我不想删除与路径相同的文件夹中的其他文件夹。事先不知道哪个文件夹有我要删除的文件夹。

我是用文件做的,但不是用文件夹做的。我在这里粘贴我的代码:

IF exist "\\PC1\temp\" (
rd "\\PC1\temp\"%dl% /s /q
ECHO Folder deleted successfully in PC1
) ELSE (echo PC1 is not connected)

注意:"%dl 是一个变量,其中包含用户之前键入的要删除的文件夹名称。

但如果该文件夹存在于另一个文件夹中(例如:\PC1\temp\test),即使我使用/s 属性,也无法删除该文件夹。

【问题讨论】:

    标签: windows cmd


    【解决方案1】:

    解决方案

    这是一个 DOS/CMD 单行程序,它将仅删除当前目录中包含子文件夹“hello”的文件夹:

    for /d %d in (*) do if exist "%d\hello\." echo y | rd /s /q "%d"
    

    注意:如果您从批处理文件运行此程序,则必须在所有位置将 %d 更改为 %%d

    rd 的背景

    如果您不想被提示,您可以为 rd 命令使用“/s”开关,并在命令中输入“y”。请注意,此命令非常危险(想想 rm -rf 在 unix 中):

    echo y | rd /s /q "\\PC1\temp\%dl%"
    

    您不必检查文件夹是否存在 - 只需以任何一种方式运行它 - 如果它不存在,它将静默失败,如果存在,它将静默成功。

    【讨论】:

    • 我以为 /q 是在没有提示的情况下删除的。不是?如果目标文件夹在另一个文件夹中怎么办? /s 应该递归删除,不是吗?感谢回复
    • /q 用于安静 - 您在原始问题中指定了这一点。使用 /q 意味着您不需要在删除之前测试文件夹是否存在 - 结果将是相同的。 /s 删除指定的文件夹以及任何子文件夹和文件。在您的情况下 \\PC1\temp 仍然存在,但 \\PC1\temp\%dl% 不会。如果 %dl% 不计算任何值,则 \\PC1\temp 被删除,所以要小心。
    • 是的,但问题是当我要删除的文件夹位于指定路径的另一个文件夹中时。比如我想删除文件夹 hello,我指定路径 PC1\temp 进行搜索,但是 hello 在 PC1\temp\test\hello,你知道我的意思吗?谢谢
    • 您是说有一个子文件夹要删除,但您不知道它在哪个文件夹?所以像这样:PC1\temp\test1\ ... test999\ 其中“hello”文件夹在 PC1\temp\test522 中?是你不知道hello文件夹在哪里的问题吗?您是要删除所有“test1 - test999”文件夹还是只删除 hello 所在的文件夹?
    • 没错,我想删除 hello 文件夹,但我不知道它在哪个子文件夹中。
    猜你喜欢
    • 2017-08-14
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    相关资源
    最近更新 更多