Войти

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


mazila-iia
17-07-2017, 17:03
Добрый день.

Есть задача по очистке определенных папок в директории. Помимо всего прочего некоторые папки трогать нельзя. Чувствую, что копать надо в сторону vbs, но, к сожалению, в нем не силен. Есть скрипт, оставленный прошлым админом, который удаляет все папки из директории, кроме тех, которые находятся в исключении
setlocal enableextensions enabledelayedexpansion

rem Укажите местонахождение директории для очистки
set sTargetFolder=C:\1

rem Поддиректория (или файл), которая НЕ должна удаляться
set sExcludeFilesOrFolders="5"

for /f "tokens=*" %%i in ('dir "%sTargetFolder%" /b /a:-d') do (
set /a bDelete = 1

for %%j in (%sExcludeFilesOrFolders%) do (
if /i "%%i" equ "%%~j" set /a bDelete = 0
)

if !bDelete! equ 1 del /f /q "%sTargetFolder%\%%i"
)

for /f "tokens=*" %%i in ('dir "%sTargetFolder%" /b /a:d') do (
set /a bDelete = 1

for %%j in (%sExcludeFilesOrFolders%) do (
if /i "%%i" equ "%%~j" set /a bDelete = 0
)

if !bDelete! equ 1 rd /s /q "%sTargetFolder%\%%i"
)

endlocal
exit /b 0

В директории "C:\1", допустим, находятся папки 2,3,4,5,6. Скрипт выше удаляет все, кроме папки 5. А мне необходимо, чтобы он именно очищал содержимое папок, которые не включены в исключения

Заранее благодарю

Iska
17-07-2017, 17:27
Есть скрипт, оставленный прошлым админом, который удаляет все папки из директории, кроме тех, которые находятся в исключении »
Меня терзают смутные сомнения… Ваш прошлый админ — не этот: CMD/BAT - [решено] Удалить всё кроме заданной папки (http://forum.oszone.net/thread-217825.html) ;)?!

чтобы он именно очищал содержимое папок, »
И файлы, и вложенные папки? Без исключений?

В директории "C:\1", допустим, находятся папки 2,3,4,5,6. »
А файлы в C:\1 надо удалять?

mazila-iia
17-07-2017, 17:35
Цитата mazila-iia:
Есть скрипт, оставленный прошлым админом, который удаляет все папки из директории, кроме тех, которые находятся в исключении »
Меня терзают смутные сомнения… Ваш прошлый админ — не этот: CMD/BAT - [решено] Удалить всё кроме заданной папки ?! »
Ага, похоже этот :)

И файлы, и вложенные папки. Файлы в C:\1 тоже надо, но, на самом деле, это не так критично
Я, к сожалению (а может и к счастью), больше по линуксу поэтому вообще пока ничего в голову путного не приходит, как это реализовать

Iska
17-07-2017, 17:46
Файлы в C:\1 тоже надо, но, на самом деле, это не так критично »
Они и так сейчас удаляются.

Замените:
if !bDelete! equ 1 rd /s /q "%sTargetFolder%\%%i"
на:
if !bDelete! equ 1 pushd "%sTargetFolder%\%%i" && (
rd /s /q "%sTargetFolder%\%%i"
popd
)

Не проверялось.

megaloman
17-07-2017, 18:21
@Echo Off

Set "BoxIn=Z:\Folder 1"

Set Exclude="Folder 5" "Folder 7"

Del /Q "%BoxIn%\*.*"
FOR /D %%f IN ("%BoxIn%\*.*") DO Call :Purgen "%%f"
GoTo :Eof

:Purgen
FOR %%d IN (%Exclude%) DO If /I %%d=="%~nx1" GoTo :Eof
Pushd %1&& (Rd %1 /S /Q 2>nul &Popd)
GoTo :Eof

В "Folder 1" имеются куча папок. Они очистятся все, кроме папок указанных в списке Exclude. В списке может быть много исключений. В корне "Folder 1" удаляются все файлы.

mazila-iia
18-07-2017, 08:01
В "Folder 1" имеются куча папок. Они очистятся все, кроме папок указанных в списке Exclude. В списке может быть много исключений. В корне "Folder 1" удаляются все файлы »
Похоже это то, что нужно. Большое спасибо




© OSzone.net 2001-2012