对于这种类型的目录结构:
\\rdwlhsdevserver\root\user1\folders\testdat.txt \\rdwlhsdevserver\root\abhay\testdat.txt \\rdwlhsdevserver\root\testuser\folders1\folder2\testdat.txt \\rdwlhsdevserver\root\devadmin\input\testdat.txt \\rdwlhsdevserver\root\admin\testdata\testdat.txt
我知道我可以使用del /s /q \\rdwlhsdevserver\root\*
从父文件夹和所有子文件夹中删除文件。但我想删除除\\rdwlhsdevserver\root\<folder>\
以外的所有文件夹和文件。
运行cmd
输出后应该像:
\\rdwlhsdevserver\root\user1\ \\rdwlhsdevserver\root\abhay\ \\rdwlhsdevserver\root\testuser\ \\rdwlhsdevserver\root\devadmin\ \\rdwlhsdevserver\root\admin\
答案 0 :(得分:2)
pushd "\\rdwlhsdevserver\root" && (
for /d %%a in (*) do ( cd "%%a" && ( 2>nul rmdir . /s /q & cd .. ) )
del /f /q *
popd
)
这会将当前活动目录(pushd
)更改为目标目录,如果每个文件夹(&&
)没有问题(条件执行运算符for /d
),则更改为(cd
),删除其内容(rmdir
)并返回父文件夹。完成后,删除(del
)根文件夹中的文件并恢复初始活动目录。
为什么不将内部for
更改为for /d %%a in (*) do rmdir "%%a" /s /q
?因为这样也会删除文件夹。但是,如果我们首先使文件夹成为当前活动目录(cd
),我们将能够删除其内容,但不能删除正在使用的文件夹本身(2>nul
是stderr
的重定向1}}流到nul
以隐藏rmdir
中的错误,说它无法删除该文件夹,因为它正在使用中)
答案 1 :(得分:1)
您需要使用\\rdwlhsdevserver\root\
循环遍历for /D
的所有子目录,然后再通过另一个for /D
循环遍历每个子目录的子目录,然后应用对每个返回的项目rmdir
(或rd
)命令,如下所示:
for /D %%J in ("\\rdwlhsdevserver\root\*") do (
for /D %%I in ("%%~J\*") do (
rmdir /S /Q "%%~I"
)
)
或直接在命令提示符下:
for /D %J in ("\\rdwlhsdevserver\root\*") do @for /D %I in ("%~J\*") do @rmdir /S /Q "%~I"
为了整体性能,如果要删除目录和文件,我建议在删除文件之前执行上述目录删除({{1} })。请注意,您的del /S /Q "\\rdwlhsdevserver\root\*"
命令行还会删除目录del
中的文件。