PDA

Показать полную графическую версию : [решено] Удаление содержимого конкретных папок


Art3m
01-12-2018, 16:10
Добрый день!

Прошу вашей помощи! Необходимо создать файлик который бы обходил все папки в каталоге и удалял содержимое только из определенных.
Например, есть каталог C:\Web\ в котором содержится много подпапок. В каждой подпапке есть еще одна папка с именем "Документы" (пример C:\Web\1\Документы или C:\Web\2\Документы), но может и чуть более глубокая структура например C:\Web\3\Work\Документы. Необходимо, чтоб файл обходил все папки \подпапки и удалял содержимое папок с именем "Документы".
Своего ума не хватает, чтоб создать! Спасибо большое!

megaloman
01-12-2018, 17:48
@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "BoxDel=ДокУменты"

rem FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%BoxDel%" /b /s /a:D`) DO (
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\" /B /S /A:D`) DO If /I "%%~nxf"=="%BoxDel%" (
Pushd "%%f" 2>nul &&(
Echo "%%f"
Rd /s /q "%%f" 2>nul
Popd
)
)
Pause

alpap
01-12-2018, 18:03
megaloman,
у меня на любую глубину только вот так заходит: dir /ad/b/s "C:\papka\*Документы", так "C:\papka\Документы" почему-то только на верхний уровень.

alpap
01-12-2018, 18:10
вот ?
155193

Art3m
01-12-2018, 18:40
megaloman,
Спасибо за быстрый ответ! Но у меня не сработало! Подскажите как могу проверить, что не так. Команда dir /ad/b/s "C:\papka\*Документы" » показывает корректно все папки с подпапками

megaloman
01-12-2018, 20:50
alpap, у меня на любую глубину только вот так заходит: dir /ad/b/s "C:\papka\*Документы", так "C:\papka\Документы" почему-то только на верхний уровень. »
Я в ужасе. Это именно так, как бороться, не знаю. Но *Документы -это не решение, проверил, выбирает и еееДокументы и т д и т п
Поэтому:@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "BoxDel=ДокУменты"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\" /B /S /A:D`) DO If /I "%%~nxf"=="%BoxDel%" (
Pushd "%%f" 2>nul &&(
Echo "%%f"
Rd /s /q "%%f" 2>nul
Popd
)
)
Pause
GoTo :Eof

megaloman
01-12-2018, 21:00
Но у меня не сработало! Подскажите как могу проверить, что не так. Команда
dir /ad/b/s "C:\papka\*Документы" »
показывает корректно все папки с подпапками »
Это в командной строке? А батник, случаем, вы создали в 866 (Dos) кодировке? Иначе по умолчанию CMD корректно работать не будет - папки с русскими символами в имени найдены не будут. Прикрепляю мой переименованный батник в нужной кодировке.
Как вариант, который не приветствую, если сохраняете батник в 1251 (Windows) кодировке, то@Echo Off
cls
Chcp 1251 >nul

Set "BoxIn=Z:\Box_In"
Set "BoxDel=ДокУменты"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\" /B /S /A:D`) DO If /I "%%~nxf"=="%BoxDel%" (
Pushd "%%f" 2>nul &&(
Echo "%%f"
Rd /s /q "%%f" 2>nul
Popd
)
)
Pause
GoTo :Eof

Art3m
01-12-2018, 21:08
Проверил обновленный код - не удаляет! Файлы остались в тестовых каталогах! Разобрался. Не хотел русские буквы на компе понимать. Пересохранил правильно! Спасибо! Потестирую побольше!

Art3m
02-12-2018, 22:53
Set "BoxIn=Z:\Box_In" »
Тут подумалось, а нельзя ли сделать чтоб батник работал из папки, без того чтоб путь задавать.Естественно, чтоб проверял эту папку и глубже, чтоб проблем не возникало, если на разных компах буква диска другая.

megaloman
03-12-2018, 00:18
Art3m, чтоб батник работал из папки @Echo Off
cls
Chcp 1251 >nul

Set "BoxIn=%~dp0"
Set "BoxDel=ДокУменты"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%" /B /S /A:D`) DO If /I "%%~nxf"=="%BoxDel%" (
Pushd "%%f" 2>nul &&(
Echo "%%f"
Rd /s /q "%%f" 2>nul
Popd
)
)
Pause
GoTo :EofИмхо, но это стремновато, не туда скопируете батник, случайно запустите, и потом будете искать возможность восстановить утерянное. ☺

Art3m
03-12-2018, 12:19
Согласен, стремновато! Но где наша не пропадала)))




© OSzone.net 2001-2012