2016-08-31 228 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說它不能刪除該文件夾,因爲它正在使用)

相關問題