|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Удаление по маске |
|
CMD/BAT - Удаление по маске
|
Новый участник Сообщения: 5 |
у меня здача стоит таким образом: при запуске bat файла удалялось всё по маске (например *.txt) но не затрагивались бы системные папки такие как Windows, Program Files ну и т.д.
Я попробовал взять код: @echo off Setlocal EnableDelayedExpansion EnableExtensions ::Попка для удаления содержащих в ней каталогов Set Src=L:\bash\test ::Файл-список ислючений каталогов любой степени вложенности Set ExcList=L:\bash\test\Exclude.txt Call :Init Call :AllFolders "%Src%" pause Goto :eof ::Переписываем содержимое файла в массив (ускорение операций) :Init For /f "UseBackQ Delims=" %%A in ("%ExcList%") do ( Set /A n+=1 Set Ex!n!=%%A ) Exit /b ::Обходим папки рекурсивно :AllFolders Call :Check "%~1" if %errorlevel%==1 Exit /B For /f "delims=" %%A in ('dir /b /a:d "%~1"') do ( Call :AllFolders "%~1\%%A" ) ::Проверка не удаляем ли рабочий каталог if /i "%~1" neq "%Src%" Echo rd /s /q "%~1" Exit /b ::Проверить есть ли переданный как аргумент каталог в массиве :Check For /L %%A in (1,1,%n%) do ( if /i "%~1"=="!Ex%%A!" Exit /B 1 ) Exit /b 0 просто поставил по маске, то есть: в Exclude.txt просто добавил пару папок которые трогать не нужно (Wondows, Programm Files). В общем не работает мой вариант. Куда копать? |
|
Отправлено: 14:41, 23-04-2014 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Цитата Гуллипут:
Setlocal EnableDelayedExpansion EnableExtensions Set Src=C: set mask=*.txt Call :Init Call :AllFolders "%Src%" pause Goto :eof ::Переписываем содержимое файла в массив (ускорение операций) :Init For /f "UseBackQ Delims=" %%A in ("%ExcList%") do ( Set /A n+=1 Set Ex!n!=%%A ) Exit /b ::Обходим папки рекурсивно :AllFolders Call :Check "%~1" if %errorlevel%==1 Exit /B For /f "delims=" %%A in ('dir /b /a:d "%~1"') do ( Call :AllFolders "%~1\%%A" ) ::Проверка не удаляем ли рабочий каталог if /i "%~1" neq "%Src%" Echo del /q "%~1"\%mask% Exit /b ::Проверить есть ли переданный как аргумент каталог в массиве :Check For /L %%A in (1,1,%n%) do ( if /i "%~1"=="!Ex%%A!" Exit /B 1 ) Exit /b 0 |
|
Отправлено: 00:43, 28-04-2014 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 70
|
Профиль | Отправить PM | Цитировать X.509, а куда пропало присвоение переменной ExcList ? Понятно, что файл в цикле for /F не найден.
Там ведь изначально стоял код: ::Файл-список исключений каталогов любой степени вложенности Set ExcList=L:\bash\test\Exclude.txt Я добавил текст, который у вас пропал, вот что получилось: @echo off Setlocal EnableDelayedExpansion EnableExtensions Set Src=C: set mask=*.txt ::Файл-список исключений каталогов любой степени вложенности Set ExcList=L:\bash\test\Exclude.txt Call :Init Call :AllFolders "%Src%" pause Goto :eof ::Переписываем содержимое файла в массив (ускорение операций) :Init For /f "UseBackQ Delims=" %%A in ("%ExcList%") do ( Set /A n+=1 Set Ex!n!=%%A ) Exit /b ::Обходим папки рекурсивно :AllFolders Call :Check "%~1" if %errorlevel%==1 Exit /B For /f "delims=" %%A in ('dir /b /a:d "%~1"') do ( Call :AllFolders "%~1\%%A" ) ::Проверка не удаляем ли рабочий каталог if /i "%~1" neq "%Src%" Echo del /q "%~1"\%mask% Exit /b ::Проверить есть ли переданный как аргумент каталог в массиве :Check For /L %%A in (1,1,%n%) do ( if /i "%~1"=="!Ex%%A!" Exit /B 1 ) Exit /b 0 |
------- Последний раз редактировалось Гуллипут, 28-04-2014 в 22:22. Отправлено: 22:13, 28-04-2014 | #12 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Гуллипут, нет, не работает к сожалению. прошёлся по всем txt файлам включая те папки которые были указанны в файле Exclude.txt и всё, те что я насоздавал, как были так и остались.
Последние строки: C:\>Exit /b 0 C:\>if 0 == 1 Exit /B C:\>For /F "delims=" %A in ('dir /b /a:d "C:\Windows\winsxs\x86_wwf-system.workf low.activities_31bf3856ad364e35_6.1.7600.16385_none_323c4905d95242ca"') do (Call :AllFolders "C:\Windows\winsxs\x86_wwf-system.workflow.activities_31bf3856ad364 e35_6.1.7600.16385_none_323c4905d95242ca\%A" ) C:\>if /I "C:\Windows\winsxs\x86_wwf-system.workflow.activities_31bf3856ad364e35 _6.1.7600.16385_none_323c4905d95242ca" NEQ "C:" Echo del /q "C:\Windows\winsxs\x 86_wwf-system.workflow.activities_31bf3856ad364e35_6.1.7600.16385_none_323c4905d 95242ca"\*.txt del /q "C:\Windows\winsxs\x86_wwf-system.workflow.activities_31bf3856ad364e35_6. 1.7600.16385_none_323c4905d95242ca"\*.txt C:\>Exit /b C:\>(Call :AllFolders "C:\Windows\winsxs\x86_wwf-system.workflow.activities_31bf 3856ad364e35_6.1.7601.17514_none_346d5ccdd640c664" ) C:\>Call :Check "C:\Windows\winsxs\x86_wwf-system.workflow.activities_31bf3856ad 364e35_6.1.7601.17514_none_346d5ccdd640c664" C:\>For /L %A in (1 1 2) do (if /I "C:\Windows\winsxs\x86_wwf-system.workflow.ac tivities_31bf3856ad364e35_6.1.7601.17514_none_346d5ccdd640c664" == "!Ex%A!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_wwf-system.workflow.activities_31bf3856ad364e3 5_6.1.7601.17514_none_346d5ccdd640c664" == "!Ex1!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_wwf-system.workflow.activities_31bf3856ad364e3 5_6.1.7601.17514_none_346d5ccdd640c664" == "!Ex2!" Exit /B 1 ) C:\>Exit /b 0 C:\>if 0 == 1 Exit /B C:\>For /F "delims=" %A in ('dir /b /a:d "C:\Windows\winsxs\x86_wwf-system.workf low.activities_31bf3856ad364e35_6.1.7601.17514_none_346d5ccdd640c664"') do (Call :AllFolders "C:\Windows\winsxs\x86_wwf-system.workflow.activities_31bf3856ad364 e35_6.1.7601.17514_none_346d5ccdd640c664\%A" ) C:\>if /I "C:\Windows\winsxs\x86_wwf-system.workflow.activities_31bf3856ad364e35 _6.1.7601.17514_none_346d5ccdd640c664" NEQ "C:" Echo del /q "C:\Windows\winsxs\x 86_wwf-system.workflow.activities_31bf3856ad364e35_6.1.7601.17514_none_346d5ccdd 640c664"\*.txt del /q "C:\Windows\winsxs\x86_wwf-system.workflow.activities_31bf3856ad364e35_6. 1.7601.17514_none_346d5ccdd640c664"\*.txt C:\>Exit /b C:\>(Call :AllFolders "C:\Windows\winsxs\x86_wwf-system.workflow.componentmodel_ 31bf3856ad364e35_6.1.7600.16385_none_8bba6f9c6f693e3b" ) C:\>Call :Check "C:\Windows\winsxs\x86_wwf-system.workflow.componentmodel_31bf38 56ad364e35_6.1.7600.16385_none_8bba6f9c6f693e3b" C:\>For /L %A in (1 1 2) do (if /I "C:\Windows\winsxs\x86_wwf-system.workflow.co mponentmodel_31bf3856ad364e35_6.1.7600.16385_none_8bba6f9c6f693e3b" == "!Ex%A!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_wwf-system.workflow.componentmodel_31bf3856ad3 64e35_6.1.7600.16385_none_8bba6f9c6f693e3b" == "!Ex1!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_wwf-system.workflow.componentmodel_31bf3856ad3 64e35_6.1.7600.16385_none_8bba6f9c6f693e3b" == "!Ex2!" Exit /B 1 ) C:\>Exit /b 0 C:\>if 0 == 1 Exit /B C:\>For /F "delims=" %A in ('dir /b /a:d "C:\Windows\winsxs\x86_wwf-system.workf low.componentmodel_31bf3856ad364e35_6.1.7600.16385_none_8bba6f9c6f693e3b"') do ( Call :AllFolders "C:\Windows\winsxs\x86_wwf-system.workflow.componentmodel_31bf3 856ad364e35_6.1.7600.16385_none_8bba6f9c6f693e3b\%A" ) C:\>if /I "C:\Windows\winsxs\x86_wwf-system.workflow.componentmodel_31bf3856ad36 4e35_6.1.7600.16385_none_8bba6f9c6f693e3b" NEQ "C:" Echo del /q "C:\Windows\wins xs\x86_wwf-system.workflow.componentmodel_31bf3856ad364e35_6.1.7600.16385_none_8 bba6f9c6f693e3b"\*.txt del /q "C:\Windows\winsxs\x86_wwf-system.workflow.componentmodel_31bf3856ad364e3 5_6.1.7600.16385_none_8bba6f9c6f693e3b"\*.txt C:\>Exit /b C:\>(Call :AllFolders "C:\Windows\winsxs\x86_wwf-system.workflow.componentmodel_ 31bf3856ad364e35_6.1.7601.17514_none_8deb83646c57c1d5" ) C:\>Call :Check "C:\Windows\winsxs\x86_wwf-system.workflow.componentmodel_31bf38 56ad364e35_6.1.7601.17514_none_8deb83646c57c1d5" C:\>For /L %A in (1 1 2) do (if /I "C:\Windows\winsxs\x86_wwf-system.workflow.co mponentmodel_31bf3856ad364e35_6.1.7601.17514_none_8deb83646c57c1d5" == "!Ex%A!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_wwf-system.workflow.componentmodel_31bf3856ad3 64e35_6.1.7601.17514_none_8deb83646c57c1d5" == "!Ex1!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_wwf-system.workflow.componentmodel_31bf3856ad3 64e35_6.1.7601.17514_none_8deb83646c57c1d5" == "!Ex2!" Exit /B 1 ) C:\>Exit /b 0 C:\>if 0 == 1 Exit /B C:\>For /F "delims=" %A in ('dir /b /a:d "C:\Windows\winsxs\x86_wwf-system.workf low.componentmodel_31bf3856ad364e35_6.1.7601.17514_none_8deb83646c57c1d5"') do ( Call :AllFolders "C:\Windows\winsxs\x86_wwf-system.workflow.componentmodel_31bf3 856ad364e35_6.1.7601.17514_none_8deb83646c57c1d5\%A" ) C:\>if /I "C:\Windows\winsxs\x86_wwf-system.workflow.componentmodel_31bf3856ad36 4e35_6.1.7601.17514_none_8deb83646c57c1d5" NEQ "C:" Echo del /q "C:\Windows\wins xs\x86_wwf-system.workflow.componentmodel_31bf3856ad364e35_6.1.7601.17514_none_8 deb83646c57c1d5"\*.txt del /q "C:\Windows\winsxs\x86_wwf-system.workflow.componentmodel_31bf3856ad364e3 5_6.1.7601.17514_none_8deb83646c57c1d5"\*.txt C:\>Exit /b C:\>(Call :AllFolders "C:\Windows\winsxs\x86_wwf-system.workflow.runtime_31bf385 6ad364e35_6.1.7600.16385_none_64f133bd015a8f4f" ) C:\>Call :Check "C:\Windows\winsxs\x86_wwf-system.workflow.runtime_31bf3856ad364 e35_6.1.7600.16385_none_64f133bd015a8f4f" C:\>For /L %A in (1 1 2) do (if /I "C:\Windows\winsxs\x86_wwf-system.workflow.ru ntime_31bf3856ad364e35_6.1.7600.16385_none_64f133bd015a8f4f" == "!Ex%A!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_wwf-system.workflow.runtime_31bf3856ad364e35_6 .1.7600.16385_none_64f133bd015a8f4f" == "!Ex1!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_wwf-system.workflow.runtime_31bf3856ad364e35_6 .1.7600.16385_none_64f133bd015a8f4f" == "!Ex2!" Exit /B 1 ) C:\>Exit /b 0 C:\>if 0 == 1 Exit /B C:\>For /F "delims=" %A in ('dir /b /a:d "C:\Windows\winsxs\x86_wwf-system.workf low.runtime_31bf3856ad364e35_6.1.7600.16385_none_64f133bd015a8f4f"') do (Call :A llFolders "C:\Windows\winsxs\x86_wwf-system.workflow.runtime_31bf3856ad364e35_6. 1.7600.16385_none_64f133bd015a8f4f\%A" ) C:\>if /I "C:\Windows\winsxs\x86_wwf-system.workflow.runtime_31bf3856ad364e35_6. 1.7600.16385_none_64f133bd015a8f4f" NEQ "C:" Echo del /q "C:\Windows\winsxs\x86_ wwf-system.workflow.runtime_31bf3856ad364e35_6.1.7600.16385_none_64f133bd015a8f4 f"\*.txt del /q "C:\Windows\winsxs\x86_wwf-system.workflow.runtime_31bf3856ad364e35_6.1.7 600.16385_none_64f133bd015a8f4f"\*.txt C:\>Exit /b C:\>(Call :AllFolders "C:\Windows\winsxs\x86_wwf-system.workflow.runtime_31bf385 6ad364e35_6.1.7601.17514_none_67224784fe4912e9" ) C:\>Call :Check "C:\Windows\winsxs\x86_wwf-system.workflow.runtime_31bf3856ad364 e35_6.1.7601.17514_none_67224784fe4912e9" C:\>For /L %A in (1 1 2) do (if /I "C:\Windows\winsxs\x86_wwf-system.workflow.ru ntime_31bf3856ad364e35_6.1.7601.17514_none_67224784fe4912e9" == "!Ex%A!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_wwf-system.workflow.runtime_31bf3856ad364e35_6 .1.7601.17514_none_67224784fe4912e9" == "!Ex1!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_wwf-system.workflow.runtime_31bf3856ad364e35_6 .1.7601.17514_none_67224784fe4912e9" == "!Ex2!" Exit /B 1 ) C:\>Exit /b 0 C:\>if 0 == 1 Exit /B C:\>For /F "delims=" %A in ('dir /b /a:d "C:\Windows\winsxs\x86_wwf-system.workf low.runtime_31bf3856ad364e35_6.1.7601.17514_none_67224784fe4912e9"') do (Call :A llFolders "C:\Windows\winsxs\x86_wwf-system.workflow.runtime_31bf3856ad364e35_6. 1.7601.17514_none_67224784fe4912e9\%A" ) C:\>if /I "C:\Windows\winsxs\x86_wwf-system.workflow.runtime_31bf3856ad364e35_6. 1.7601.17514_none_67224784fe4912e9" NEQ "C:" Echo del /q "C:\Windows\winsxs\x86_ wwf-system.workflow.runtime_31bf3856ad364e35_6.1.7601.17514_none_67224784fe4912e 9"\*.txt del /q "C:\Windows\winsxs\x86_wwf-system.workflow.runtime_31bf3856ad364e35_6.1.7 601.17514_none_67224784fe4912e9"\*.txt C:\>Exit /b C:\>(Call :AllFolders "C:\Windows\winsxs\x86_xcbdav.inf_31bf3856ad364e35_6.1.760 0.16385_none_23239678b7db5032" ) C:\>Call :Check "C:\Windows\winsxs\x86_xcbdav.inf_31bf3856ad364e35_6.1.7600.1638 5_none_23239678b7db5032" C:\>For /L %A in (1 1 2) do (if /I "C:\Windows\winsxs\x86_xcbdav.inf_31bf3856ad3 64e35_6.1.7600.16385_none_23239678b7db5032" == "!Ex%A!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_xcbdav.inf_31bf3856ad364e35_6.1.7600.16385_non e_23239678b7db5032" == "!Ex1!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_xcbdav.inf_31bf3856ad364e35_6.1.7600.16385_non e_23239678b7db5032" == "!Ex2!" Exit /B 1 ) C:\>Exit /b 0 C:\>if 0 == 1 Exit /B C:\>For /F "delims=" %A in ('dir /b /a:d "C:\Windows\winsxs\x86_xcbdav.inf_31bf3 856ad364e35_6.1.7600.16385_none_23239678b7db5032"') do (Call :AllFolders "C:\Win dows\winsxs\x86_xcbdav.inf_31bf3856ad364e35_6.1.7600.16385_none_23239678b7db5032 \%A" ) C:\>if /I "C:\Windows\winsxs\x86_xcbdav.inf_31bf3856ad364e35_6.1.7600.16385_none _23239678b7db5032" NEQ "C:" Echo del /q "C:\Windows\winsxs\x86_xcbdav.inf_31bf38 56ad364e35_6.1.7600.16385_none_23239678b7db5032"\*.txt del /q "C:\Windows\winsxs\x86_xcbdav.inf_31bf3856ad364e35_6.1.7600.16385_none_23 239678b7db5032"\*.txt C:\>Exit /b C:\>(Call :AllFolders "C:\Windows\winsxs\x86_xnacc.inf.resources_31bf3856ad364e3 5_6.1.7600.16385_ru-ru_d818115be115363a" ) C:\>Call :Check "C:\Windows\winsxs\x86_xnacc.inf.resources_31bf3856ad364e35_6.1. 7600.16385_ru-ru_d818115be115363a" C:\>For /L %A in (1 1 2) do (if /I "C:\Windows\winsxs\x86_xnacc.inf.resources_31 bf3856ad364e35_6.1.7600.16385_ru-ru_d818115be115363a" == "!Ex%A!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_xnacc.inf.resources_31bf3856ad364e35_6.1.7600. 16385_ru-ru_d818115be115363a" == "!Ex1!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_xnacc.inf.resources_31bf3856ad364e35_6.1.7600. 16385_ru-ru_d818115be115363a" == "!Ex2!" Exit /B 1 ) C:\>Exit /b 0 C:\>if 0 == 1 Exit /B C:\>For /F "delims=" %A in ('dir /b /a:d "C:\Windows\winsxs\x86_xnacc.inf.resour ces_31bf3856ad364e35_6.1.7600.16385_ru-ru_d818115be115363a"') do (Call :AllFolde rs "C:\Windows\winsxs\x86_xnacc.inf.resources_31bf3856ad364e35_6.1.7600.16385_ru -ru_d818115be115363a\%A" ) C:\>if /I "C:\Windows\winsxs\x86_xnacc.inf.resources_31bf3856ad364e35_6.1.7600.1 6385_ru-ru_d818115be115363a" NEQ "C:" Echo del /q "C:\Windows\winsxs\x86_xnacc.i nf.resources_31bf3856ad364e35_6.1.7600.16385_ru-ru_d818115be115363a"\*.txt del /q "C:\Windows\winsxs\x86_xnacc.inf.resources_31bf3856ad364e35_6.1.7600.1638 5_ru-ru_d818115be115363a"\*.txt C:\>Exit /b C:\>(Call :AllFolders "C:\Windows\winsxs\x86_xnacc.inf_31bf3856ad364e35_6.1.7600 .16385_none_b381dfe1d4da7da9" ) C:\>Call :Check "C:\Windows\winsxs\x86_xnacc.inf_31bf3856ad364e35_6.1.7600.16385 _none_b381dfe1d4da7da9" C:\>For /L %A in (1 1 2) do (if /I "C:\Windows\winsxs\x86_xnacc.inf_31bf3856ad36 4e35_6.1.7600.16385_none_b381dfe1d4da7da9" == "!Ex%A!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_xnacc.inf_31bf3856ad364e35_6.1.7600.16385_none _b381dfe1d4da7da9" == "!Ex1!" Exit /B 1 ) C:\>(if /I "C:\Windows\winsxs\x86_xnacc.inf_31bf3856ad364e35_6.1.7600.16385_none _b381dfe1d4da7da9" == "!Ex2!" Exit /B 1 ) C:\>Exit /b 0 C:\>if 0 == 1 Exit /B C:\>For /F "delims=" %A in ('dir /b /a:d "C:\Windows\winsxs\x86_xnacc.inf_31bf38 56ad364e35_6.1.7600.16385_none_b381dfe1d4da7da9"') do (Call :AllFolders "C:\Wind ows\winsxs\x86_xnacc.inf_31bf3856ad364e35_6.1.7600.16385_none_b381dfe1d4da7da9\% A" ) C:\>if /I "C:\Windows\winsxs\x86_xnacc.inf_31bf3856ad364e35_6.1.7600.16385_none_ b381dfe1d4da7da9" NEQ "C:" Echo del /q "C:\Windows\winsxs\x86_xnacc.inf_31bf3856 ad364e35_6.1.7600.16385_none_b381dfe1d4da7da9"\*.txt del /q "C:\Windows\winsxs\x86_xnacc.inf_31bf3856ad364e35_6.1.7600.16385_none_b38 1dfe1d4da7da9"\*.txt C:\>Exit /b C:\>if /I "C:\Windows\winsxs" NEQ "C:" Echo del /q "C:\Windows\winsxs"\*.txt del /q "C:\Windows\winsxs"\*.txt C:\>Exit /b C:\>if /I "C:\Windows" NEQ "C:" Echo del /q "C:\Windows"\*.txt del /q "C:\Windows"\*.txt C:\>Exit /b C:\>if /I "C:" NEQ "C:" Echo del /q "C:"\*.txt C:\>Exit /b C:\>pause Для продолжения нажмите любую клавишу . . . |
Отправлено: 17:38, 29-04-2014 | #13 |
Пользователь Сообщения: 70
|
Профиль | Отправить PM | Цитировать X.509, я же говорил, что в команде удаления:
команда echo стоит для того, чтобы контролировать правильность работы без реального удаления. Чтобы файлы реально удалялись, надо вместо этого написать |
------- Отправлено: 00:24, 06-05-2014 | #14 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Удаление каталогов по маске. | mishgan2004 | Скриптовые языки администрирования Windows | 4 | 20-07-2017 14:00 | |
CMD/BAT - Удаление файлов по маске | IlyaBarkov | Скриптовые языки администрирования Windows | 6 | 15-10-2013 05:03 | |
VBS/WSH/JS - [решено] удаление старых файлов по маске | support23 | Скриптовые языки администрирования Windows | 1 | 03-06-2013 08:41 | |
Delphi - Перемещение и удаление файлов по маске. | Putin-mode | Программирование и базы данных | 1 | 21-06-2010 12:16 |
|