Показать полную графическую версию : [решено] Нужен Bat-ник который будет удалять файлы в папке с определенным расширением
есть папка (например) C:\Files. В ней есть ещё папки. В этих папках среди других файлов есть файлы с расширением *.r01, *.r02, *.r28 и с другими цифрами.
В ней нужно удалить файлы которые имеют расширение отличное от *.r01 и *.r16. То есть эти оставить, а с другими цифрами удалить.
Каким будет батник?
Foreigner
31-05-2011, 17:48
intersk,
@echo off
setlocal
for %%i in ( .r01 .r16 ) do set "check%%i=1"
for /f "tokens=*" %%i in (' dir /b /s /a-d "c:\files" ') do (
if not defined check%%~xi del "%%i"
)
El Sanchez
31-05-2011, 18:14
intersk, №2
For /R "C:\Files" %%A In (*) Do If /i "%%~xA" NEQ ".r01" If /i "%%~xA" NEQ ".r16" Del /F /Q "%%A" 2>nul
до кучи:for /f "delims=" %%a in ('dir/b/s/a-d *^|findstr/eiv "\.r01 \.r16"') do del "%%a"
a-d *^|findstr/eirv "\.r01 \.r16"' »
не могли бы вы объяснить эту часть
ferget, так понятней?findstr /e /i /r /v "\.r01 \.r16"оставляет все строки кроме заканчивающихся на ".r01" или ".r16"
/a-d *^ »
спасибо, еще вот
ferget, dir /b /s /a-dключ /a-d значит исключая каталоги
Уточню свой вопрос - Файлы в расширении имеют первую букву либо *.rxx либо *.hxx.
xx - это цифры. Они разные. Нужно оставить только с цифрами 01 и 16 (*.r01, *.r16, *.h01, *.h16). В папках ещё есть разные файлы. Остальные файлы в папках не удалять!!!!
PS. сработал только первый вариант...но почему то файл *.cmd удаляется после работы...(и удаляет все файлы - но теперь уточнил свою задачу)
Файлы в расширении имеют первую букву либо *.rxx либо *.hxx »for /f "delims=" %%a in (
'dir/b/s/a-d^|findstr/eir "\.[rh][0-9][0-9]"^|findstr/eirv "\.[rh]01 \.[rh]16"'
) do del "%%a"
[rh][0-9][0-9]" »
там попадаются расширения и .r108 и .h1454 (и по три и по четыре цифры)
значить нужно добавить ещё пару цифр в скобках? вот так
[rh][0-9][0-9][0-9][0-9]" »
но так уже не удаляются с двумя цифрами........
но так уже не удаляются с двумя цифрами »отбор файлов с 1 и более цифр на конце:findstr/eir "\.[rh][0-9][0-9]*"справка по FINDSTR:help findstr|more
всего звездочку нужно поставить - вот это логическая красота! такие тонкости знаешь!
а можно данный батник запаковать в какой исполняемый файл? (при запуске выбираешь целевую папку в которой надо "почистить" и по окончании список того что удалено)
а можно данный батник запаковать в какой исполняемый файл? »говорят можно - с помощью стороннего ПО, но этим не увлекаюсь и вам не советую,
если действительно надо - лучше посмотреть в сторону AutoIT (http://forum.oszone.net/forum-103.html)/AHK
при запуске выбираешь целевую папку в которой надо "почистить" и по окончании список того что удалено»для этого EXE не нужен, к примеру:
- оформить ввод папки через параметр;
- назвать батник что-нибудь типа "Чистка папки.CMD";
- скопировать его в папку "%UserProfile%\SendTo";
- выбрать в обозревателе папку и "отправить" на батник
@echo off
if not exist "%~1\" exit
pushd "%~1"
set $i=0& for /f "delims=" %%a in (
'dir/b/s/a-d^|findstr/eir "\.[rh][0-9]*"^|findstr/eirv "\.[rh]01 \.[rh]16"'
) do del "%%a">nul&&(echo %%a & set/a $i+=1)
if %$i% gtr 0 (
echo -----------------
echo %$i% files deleted
pause>nul
)
понятно, буду пользоваться простым способом - помещением батника в нужную папку. Тема решена!
for /f "delims=" %%a in (
'dir/b/s/a-d^|findstr/eir "\.[rh][0-9][0-9]"^|findstr/eirv "\.[rh]01 \.[rh]16"'
) do del "%%a" »
знакомые ребята-программисты сказали что способ оригинальный, интересный ))) я конечно сказал что это не я )) ещё раз спасибо!
понадобилась модернизация командного файла )
Еще нужно поудалять файлы такие: они содержать в себе [название][_][цифры].rsc (*****_42.rsc)/
Нужно оставить только файлы содержащие _01.rsc, _16.rsc, _93.rsc
Код для удаления файлов НЕ *.r01, *.r16, *r.93 и *.h01, *.h16, *h.93 будет такой (под спойлером - прошу проверить)
@echo off
if not exist "%~1\" exit
pushd "%~1"
set $i=0& for /f "delims=" %%a in (
'dir/b/s/a-d^|findstr/eir "\.[rh][0-9]*"^|findstr/eirv "\.[rh]01 \.[rh]16 \.[rh]93"'
) do del "%%a">nul&&(echo %%a & set/a $i+=1)
if %$i% gtr 0 (
echo -----------------
echo %$i% files deleted
pause>nul
)
PS у автора командного файла заранее прошу разрешения на указание его ника при пользовании командным файлом
нужно поудалять файлы такие: они содержать в себе [название][_][цифры].rsc (*****_42.rsc)/
Нужно оставить только файлы содержащие _01.rsc, _16.rsc, _93.rsc »навскидку:'dir/b/s/a-d^|findstr/eir "_[0-9][0-9]*\.rsc"^|findstr/eirv "_01\.rsc _16\.rsc _93\.rsc"'
amel27, так? или можно как то в "одну" строку уместить?
@echo off
if not exist "%~1\" exit
pushd "%~1"
set $i=0& for /f "delims=" %%a in (
'dir/b/s/a-d^|findstr/eir "\.[rh][0-9]*"^|findstr/eirv "\.[rh]01 \.[rh]16 \.[rh]93"'
'dir/b/s/a-d^|findstr/eir "_[0-9][0-9]*\.rsc"^|findstr/eirv "_01\.rsc _16\.rsc _93\.rsc"'
) do del "%%a">nul&&(echo %%a & set/a $i+=1)
if %$i% gtr 0 (
echo -----------------
echo %$i% files deleted
pause>nul
)
И чтобы в конце работы батника было "для закрытия окна нажмите любую клавишу"
можно как то в "одну" строку уместить? »ну если только сформулировать "одним" условием )
чтобы в конце работы батника было "для закрытия окна нажмите любую клавишу" »echo для закрытия окна нажмите любую клавишу& pause>nul
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.