Тема: CMD/BAT: Как игнорировать файлы при удалении?
Удаляю файлы так:
del /f /q *.cfg
как мне удалить все файлы *.cfg, но не удалять файлы 1.cfg, 2.cfg, 3.cfg
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Удаляю файлы так:
del /f /q *.cfg
как мне удалить все файлы *.cfg, но не удалять файлы 1.cfg, 2.cfg, 3.cfg
Как то так (для пакетного файла "%" надо удвоить):
for %i in (*.cfg) do if not "%~ni"=="1" if not "%~ni"=="2" if not "%~ni"=="3" del /f /q "%~i"
for %i in (*.cfg) do if not "%~ni"=="1" if not "%~ni"=="2" if not "%~ni"=="3" del /f /q "%~i"
добавил строку в *.bat
чё-то не фурычит
))
(для пакетного файла "%" надо удвоить)
добавил строку в *.bat
чё-то не фурычит
«Подымите мне очи…»:
для пакетного файла "%" надо удвоить
спасиб ))
Ekklesiast, напишите заголовок темы по-русски.
del
добрый день!
если задание изменим: удалить все файлы *.cfg, кроме самого "старого" *.cfg
как теперь будет выглядеть батник?
rost, попробуйте на свой страх и риск:
for /f "skip=1 delims=" %%i in ('dir /b /o:-d *.cfg') do del "%%~i"
зачет
Ещё способ исключить файлы при удалении - поставить исключаемым файлам атрибуты скрытый и/или системный в любой комбинации командой attrib. После команды del снять атрибуты.
Можно наоборот - удаляемым файлам поставить нужные атрибуты, а в команде del использовать ключ /a
След. задача:
Есть папка, мне там нужно удалить все файлы кроме файлов с расширением *.cfg и *.txt
Также нужна возможность задавать переменный путь и маски (*.cfg и *.txt), типа так:
set FILEMASK= *.cfg and *.txt
set FILEPATH= 1
for %%i in ('dir /b /s "%FILEPATH%\*.*"') do if not "%%~ni"==%FILEMASK% del /f /q "%%~i"
Подскажите как сделать
После проверки замени ECHO на DEL:
set "FILEMASK=.*\.cfg$ .*\.txt$"
set "FILEPATH=P:\subdir"
pushd "%FILEPATH%"
for /f "delims=" %%i in ('dir /a:-d /b^|findstr /v /i "%FILEMASK%"') do echo "%%i"
popd
wisgest, Спасиб
След. задача:
set "FILEMASK=.*\a3dapi.dll$"
set "FILEMASK=%FILEMASK% .*\voice_tweak.exe$"
set "FILEMASK=%FILEMASK% .*\Mssv12.asi$"
set "FILEMASK=%FILEMASK% .*\.wad$"
set "FILEPATH=1"
pushd "%FILEPATH%"
for /f "delims=" %%i in ('dir /a:-d /b^|findstr /v /i "%FILEMASK%"') do del /f /q /a "%%i"
popd
Как-то неудобно сделал список игнорируемых файлов (их будет штук 20) в столбик.
Хотелось бы как-то так:
set "FILEMASK=
.*\a3dapi.dll$
.*\voice_tweak.exe$
.*\Mssv12.asi$
.*\.wad$"
Заранее огромное спасибо.
Хотелось бы как-то так:
Это элементарно:
set FILEMASK=^
.*\a3dapi.dll$ ^
.*\voice_tweak.exe$ ^
.*\Mssv12.asi$ ^
.*\.wad$
Только что-то меня берёт сомнение, правильно ли в данном случае составлен шаблон для FINDSTR.
По-моему, должно быть так (не проверял):
set FILEMASK=^
^^a3dapi\.dll$ ^
^^voice_tweak\.exe$ ^
^^Mssv12\.asi$ ^
.*\.wad$
~~~~~~~~~~~~~~~~~~~~
По поводу последнего примера до правки:
для удобства надо как-то разместить список игнорируемых файлов в столбик, т.к. в строчку оч. неудобно.
for %%i in (bin\*.cfg) do ^
if not "%%~ni"=="auto" ^
if not "%%~ni"=="config" ^
if not "%%~ni"=="default" ^
if not "%%~ni"=="lang" ^
if not "%%~ni"=="listen" ^
if not "%%~ni"=="server" ^
if not "%%~ni"=="skill" ^
if not "%%~ni"=="violence" ^
del /f /q "%%~i"
setlocal enabledelayedexpansion
set IF=auto\config\default\lang\listen\server\skill\violence
set IF=\%IF:\=" \%"
set IF=!IF:\=if not "%%~ni"=="!
for %%i in (bin\*.cfg) do %IF% del /f /q "%%~i"
setlocal enabledelayedexpansion
set IF=auto^
\config^
\default^
\lang^
\listen^
\server^
\skill^
\violence
set IF=\%IF:\=" \%"
set IF=!IF:\=if not "%%~ni"=="!
for %%i in (bin\*.cfg) do %IF% del /f /q "%%~i"
(В двух последних примерах исправил «*» на «bin\*.cfg».)
wisgest, спасиб
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться