【问题标题】:Remove only files and sub folders from a directory through command prompt通过命令提示符从目录中仅删除文件和子文件夹
【发布时间】:2019-01-14 06:57:31
【问题描述】:

我在C:\Test 路径中有一个名为Test 的文件夹。这个Test 文件夹中有多个文件和文件夹。现在我想删除 Test 文件夹中的所有内容,而不是删除 Test 文件夹本身。

我一直在尝试这些命令,但它只删除文件而不是文件夹。

del C:\Test\* 
del C:\Test\*.*

我想要一个命令来删除 Test 中的文件和子文件夹。

【问题讨论】:

标签: cmd command-prompt del


【解决方案1】:

这是必须使用的命令。

CD "C:/Test" && FOR /D %i IN ("*") DO RD /S /Q "%i" && DEL /Q *.* 

【讨论】:

    【解决方案2】:

    用一个命令是不可能的,但用一个命令行是不可能的。

    我会这样做:

    cd /D "C:\Test" && rd /S /Q "C:\Test"
    

    这首先更改为目标根目录。 && operator 让以下命令仅在前一个命令成功时执行。然后尝试删除目录及其所有内容;对于内容它工作正常,但对于根本身,错误The process cannot access the file because it is being used by another process. 因为前面的cd 命令。可以通过将2> nul 附加到rd 命令来抑制此错误消息(以及其他错误消息):

    cd /D "C:\Test" && rd /S /Q "C:\Test" 2> nul
    

    如果要恢复原始工作目录,请使用pushd/popd 而不是cd

    pushd "C:\Test" && (rd /S /Q "C:\Test" 2> nul & popd)
    

    这种方法相对于删除和重新创建(如rd /S /Q "C:\test" && md "C:\Test")的优点是不会丢失根目录的属性、所有者和安全设置。


    或者,您可以执行以下操作,这更复杂但可以避免抑制错误:

    del /S /Q "C:\Test\*.*" & for /D %%D in ("C:\Test\*") do @rm /S /Q "%%~D"
    

    这首先删除驻留在根目录中的所有文件,然后遍历所有直接子目录并一个接一个地删除。根目录本身永远不会被触及。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-24
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 2012-01-02
      • 2012-10-31
      相关资源
      最近更新 更多