Показать полную графическую версию : [решено] Удаление содержимого конкретных папок
Добрый день!
Прошу вашей помощи! Необходимо создать файлик который бы обходил все папки в каталоге и удалял содержимое только из определенных.
Например, есть каталог 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
megaloman,
у меня на любую глубину только вот так заходит: dir /ad/b/s "C:\papka\*Документы", так "C:\papka\Документы" почему-то только на верхний уровень.
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
Проверил обновленный код - не удаляет! Файлы остались в тестовых каталогах! Разобрался. Не хотел русские буквы на компе понимать. Пересохранил правильно! Спасибо! Потестирую побольше!
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Имхо, но это стремновато, не туда скопируете батник, случайно запустите, и потом будете искать возможность восстановить утерянное. ☺
Согласен, стремновато! Но где наша не пропадала)))
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.