【问题标题】: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"
这首先删除驻留在根目录中的所有文件,然后遍历所有直接子目录并一个接一个地删除。根目录本身永远不会被触及。