1 (изменено: alexii, 2014-01-10 16:08:38)

Тема: CMD/BAT: Удаление определенных папок

Привет форумчане. Задача  такова: На диске D есть расшаренная папка TEST, в ней куча подпапок (test1, test2 и т.д), так вот нужно удалить всё из папки TEST, но не удалять некоторые подпапки и их содержимое (например test5 и test6).

как удалить всё я разобрался, а вот как оставить некоторые подпапки и их содержимое, до меня не доходит.
удаляю так:

for %%i in ("D:\TEST") do (

    pushd %%i && 2>nul rd /s /q .
    popd
)

что и куда надо прописать. заранее спасибо

2

Re: CMD/BAT: Удаление определенных папок

CMD/BAT: Как игнорировать файлы при удалении?

Забыл пароль и потерял e-mail.

3

Re: CMD/BAT: Удаление определенных папок

как игнорировать файлы я тоже понял, а как игнорировать папки???????

4

Re: CMD/BAT: Удаление определенных папок

В чём разница?

Забыл пароль и потерял e-mail.

5

Re: CMD/BAT: Удаление определенных папок

Ниже приведён один из способов (о его существовании говорил и Smitis).

@set Directory_for_Cleanup=D:\TEST
@for /f "usebackq eol=@ tokens=*" %%i in ("%~f0") do @attrib +h "%Directory_for_Cleanup%\%%i"
@for /d %%i in ("%Directory_for_Cleanup%\*") do @rd /s /q "%%~i"
@for /f "usebackq eol=@ tokens=*" %%i in ("%~f0") do @attrib -h "%Directory_for_Cleanup%\%%i"
@echo Cleanup completed.
@pause>nul
@exit

test5
test6

Только будьте крайне осторожны с командой "rd", тестируйте код, заменяя в нём "rd" на "echo".

6

Re: CMD/BAT: Удаление определенных папок

Ещё один вариант ("экзотический"):

@set Directory_for_Cleanup=D:\TEST

@echo off
set temp_folder=%temp%\%random%
Robocopy "%Directory_for_Cleanup%" "%temp_folder%" /E /MOVE /XD test5 test6 >nul
rd /s /q "%temp_folder%"
echo Cleanup completed.
pause>nul

7

Re: CMD/BAT: Удаление определенных папок

Yury.

Большое вам спасибо. все работает как надо.

8 (изменено: Yury, 2014-01-13 12:33:04)

Re: CMD/BAT: Удаление определенных папок

На всякий случай ещё два варианта:


@echo off
set Directory_for_Cleanup=D:\TEST
for /f "tokens=*" %%i in ('dir /b /ad "%Directory_for_Cleanup%"') do (
 for /f %%j in ('^(type "%~f0"^|more +10^&dir /b /a:d "%Directory_for_Cleanup%"^)^|findstr /i /x %%i^|find /c /i /v ""') do (
  if %%j==1 rd /s /q "%Directory_for_Cleanup%\%%i"
))
echo Cleanup completed.
pause>nul
exit

test5
test6

@echo off
set Directory_for_Cleanup=D:\TEST
for /f "tokens=*" %%i in ('dir /a:d /b "%Directory_for_Cleanup%"') do type "%~f0"|more +7|findstr /i /x "%%i">nul||rd /s /q "%Directory_for_Cleanup%\%%i"
echo Cleanup completed.
pause>nul
exit

test5
test6