![]() |
Удаление по маске
у меня здача стоит таким образом: при запуске bat файла удалялось всё по маске (например *.txt) но не затрагивались бы системные папки такие как Windows, Program Files ну и т.д.
Я попробовал взять код: Код:
@echo off Код:
Set Src=L:\bash\test Код:
Set Src=C:\*.txt В общем не работает мой вариант. Куда копать? |
предлагаю использовать для данной задачи robocopy
например навскидку так Код:
robocopy /e /mov /r:0 c:\ d:\помойка *.txt /xd c:\windows /xd "Program files" |
Цитата:
1) удаление каталогов, а не файлов (команда rd) 2) указание входного каталога без всяких подстановочных символов типа *. Не проверяю придирчиво правильность исходного файла, но, если он работает. то изменить его надо так: Set Src=C: set mask=*.txt . . . if /i "%~1" neq "%Src%" Echo del /q "%~1"\%mask% И даже это не совсем то, что надо, потому что Echo в этой строке явно рассчитано не на реальное удаление, а на отладочную проверку данного алгоритма. Я этот приём часто использую. После того, как убедишься, что выдаются на экран нужные команды удаления, надо будет убрать Echo. |
Цитата:
Код:
Не удается найти файл . |
Получившийся текст - в студию ! А то беспредметный разговор получается.
|
я не понимаю, зачем вообще городить скрипт, если уже есть родная утилита, которая делает то что надо.
|
Цитата:
|
Гуллипут, http://ru.wikipedia.org/wiki/Robocopy
|
Цитата:
Правда, у автора вопроса ситуация может быть другая, так что интересно было бы знать его мнение о robocopy. |
Цитата:
|
Цитата:
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 |
X.509, а куда пропало присвоение переменной ExcList ? Понятно, что файл в цикле for /F не найден.
Там ведь изначально стоял код: Код:
::Файл-список исключений каталогов любой степени вложенности Я добавил текст, который у вас пропал, вот что получилось: Код:
@echo off |
Гуллипут, нет, не работает к сожалению. прошёлся по всем txt файлам включая те папки которые были указанны в файле Exclude.txt и всё, те что я насоздавал, как были так и остались.
Последние строки: Код:
C:\>Exit /b 0 |
X.509, я же говорил, что в команде удаления:
Код:
::Проверка не удаляем ли рабочий каталог Код:
::Проверка не удаляем ли рабочий каталог |
Время: 00:12. |
Время: 00:12.
© OSzone.net 2001-