2016-08-31 227 views
0

对于这种类型的目录结构:如何删除子文件夹而不删除父文件夹和子文件夹?

\\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

你有什么试过?什么是'rm'? 'cmd'中没有这样的命令!那么位于'\\ rdwlhsdevserver \ root \ \'中的文件呢?他们是否需要删除? – aschipfl

+0

@aschipfl:对不起..添加了unix命令。我修改了这部分。我可以使用“del/s/q d:\ root \ *”删除文件夹中的所有文件,但文件夹不会被删除。 – abhayk

回答

1

您需要使用for /D循环,然后遍历每个子目录的子目录再次遍历的\\rdwlhsdevserver\root\所有子目录通过另一个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" 

对于整体性能的缘故,如果你想删除的目录文件,我建议文件前做上述目录中去除删除(del /S /Q "\\rdwlhsdevserver\root\*")。请注意,您的del命令行还会删除位于目录\\rdwlhsdevserver\root\中的文件。

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)根文件夹内的文件并恢复初始活动目录。

为什么不改变内部forfor /d %%a in (*) do rmdir "%%a" /s /q?因为这也会删除文件夹。但是,如果我们首先将该文件夹设置为当前活动目录(cd),我们将能够删除其内容,但不会删除文件夹本身,因为它正在使用中(2>nulstderr流的重定向到nul以隐藏错误rmdir说它不能删除该文件夹,因为它正在使用)

相关问题