【问题标题】:Delete a directory and its files using command line but don't throw error if it doesn't exist使用命令行删除目录及其文件,但如果不存在则不抛出错误
【发布时间】:2013-01-08 06:48:49
【问题描述】:

我需要一个 Windows 命令来删除一个目录及其所有包含的文件,但如果该目录不存在,我不想看到任何错误。

【问题讨论】:

    标签: windows batch-file cmd


    【解决方案1】:

    将del 命令的输出重定向到 nul。注意2,表示错误输出应该被重定向。另请参阅this question,尤其是技术文档Using command redirection operators。

    del {whateveroptions} 2>null
    

    或者你可以在调用del之前检查文件是否存在:

    if exist c:\folder\file del c:\folder\file
    

    请注意,您可以使用if exist c:\folder\(以\ 结尾)来检查c:\folder 是否确实是文件夹而不是文件。

    【讨论】:

    • 试过这个我仍然得到“系统找不到指定的路径”
    • 强制递归删除,忽略错误:rmdir /s /q some\where\myFolder 2>nul
    • @crusy 非常感谢,但这与 dbenham 6 年前 前已经给出的答案相同 (rmdir = rd)
    【解决方案2】:

    要么将 stderr 重定向到 nul

    rd /q /s "c:\yourFolder" 2>nul
    

    或者在删除之前验证文件夹是否存在。请注意,结尾的 \ 在 IF 条件下很关键。

    if exist "c:\yourFolder\" rd /q /s "c:\yourFolder"
    

    【讨论】:

    • @GolezTrol - 你们都没有按照 OP 的要求删除文件夹。你们俩都专注于删除文件。
    【解决方案3】:

    对我来说,在 Windows 10 上,以下功能非常有用:

    if exist <path> rmdir <path> /q /s
    

    q 代表“不询问就删除”,s 代表“删除其中的所有子文件夹和文件”。

    你也可以连接命令:

    (if exist <path> rmdir <path> /q /s) && <some other command that executes after deleting>
    

    【讨论】:

    • Concatinate 对我有帮助,否则当 rmdir 与 if exist 配对时它不会工作。
    【解决方案4】:

    您可以将 stderr 重定向到 nul

    del filethatdoesntexist.txt 2>nul
    

    【讨论】:

    • 你试过了吗?这行不通。如果它不存在,我仍然会看到错误
    【解决方案5】:

    上面的提示中出现了 Y 或 N。因此,我改用了以下方法,并且效果很好。

    if exist cddd rmdir cddd
    

    希望这对某人有所帮助。

    干杯。

    【讨论】:

    • 要避免提示,您必须将 /Q 添加到 rmdir 命令。如果您需要删除所有文件和子目录,您还需要 /S。您没有看到提示可能是因为目录不存在。
    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2012-11-14
    相关资源
    最近更新 更多