Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удаление содержимого конкретных папок (http://forum.oszone.net/showthread.php?t=337992)

Art3m 01-12-2018 16:10 2843563

Удаление содержимого конкретных папок
 
Добрый день!

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

megaloman 01-12-2018 17:48 2843571

Код:

@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 2843573

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

alpap 01-12-2018 18:10 2843574

вот ?
Файл 155193

Art3m 01-12-2018 18:40 2843578

megaloman,
Спасибо за быстрый ответ! Но у меня не сработало! Подскажите как могу проверить, что не так. Команда
Цитата:

Цитата alpap
dir /ad/b/s "C:\papka\*Документы" »

показывает корректно все папки с подпапками

megaloman 01-12-2018 20:50 2843593

alpap,
Цитата:

Цитата 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 2843598

Вложений: 1
Цитата:

Цитата Art3m
Но у меня не сработало! Подскажите как могу проверить, что не так. Команда
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 2843599

Вложений: 1
Проверил обновленный код - не удаляет! Файлы остались в тестовых каталогах! Разобрался. Не хотел русские буквы на компе понимать. Пересохранил правильно! Спасибо! Потестирую побольше!

Art3m 02-12-2018 22:53 2843811

Цитата:

Цитата megaloman
Set "BoxIn=Z:\Box_In" »

Тут подумалось, а нельзя ли сделать чтоб батник работал из папки, без того чтоб путь задавать.Естественно, чтоб проверял эту папку и глубже, чтоб проблем не возникало, если на разных компах буква диска другая.

megaloman 03-12-2018 00:18 2843821

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 2843879

Согласен, стремновато! Но где наша не пропадала)))


Время: 10:20.

Время: 10:20.
© OSzone.net 2001-