2016-08-31 2 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

Вы должны перебрать все подкаталоги из \\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" 

Ради общей производительности, если вы хотите удалить каталоги и файлы, я рекомендую сделать выше удаление директорий перед тем файловой удаление (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) файлы внутри корневой папки и восстановите исходный активный каталог.

Почему бы не изменить внутренние for на for /d %%a in (*) do rmdir "%%a" /s /q? Потому что это также приведет к удалению папки. Но если мы сначала сделаем папку текущим активным каталогом(), мы сможем удалить ее содержимое, но не самую папку, поскольку она используется (2>nul - это перенаправление потока stderr на nul, чтобы скрыть ошибку в rmdir говорит, что он не может удалить папку, поскольку она используется)

Смежные вопросы