Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Нужен Bat-ник который будет удалять файлы в папке с определенным расширением (http://forum.oszone.net/showthread.php?t=207943)

intersk 31-05-2011 16:33 1685753

Нужен Bat-ник который будет удалять файлы в папке с определенным расширением
 
есть папка (например) C:\Files. В ней есть ещё папки. В этих папках среди других файлов есть файлы с расширением *.r01, *.r02, *.r28 и с другими цифрами.
В ней нужно удалить файлы которые имеют расширение отличное от *.r01 и *.r16. То есть эти оставить, а с другими цифрами удалить.
Каким будет батник?

Foreigner 31-05-2011 17:48 1685809

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 1685835

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

amel27 01-06-2011 06:43 1686111

до кучи:
Код:

for /f "delims=" %%a in ('dir/b/s/a-d *^|findstr/eiv "\.r01 \.r16"') do del "%%a"

ferget 01-06-2011 06:57 1686115

Цитата:

Цитата amel27
a-d *^|findstr/eirv "\.r01 \.r16"' »

не могли бы вы объяснить эту часть

amel27 01-06-2011 07:01 1686117

ferget, так понятней?
Код:

findstr /e /i /r /v "\.r01 \.r16"
оставляет все строки кроме заканчивающихся на ".r01" или ".r16"

ferget 01-06-2011 07:18 1686123

Цитата:

Цитата ferget
/a-d *^ »

спасибо, еще вот

amel27 01-06-2011 07:28 1686126

ferget,
Код:

dir /b /s /a-d
ключ /a-d значит исключая каталоги

intersk 10-06-2011 15:23 1692129

Уточню свой вопрос - Файлы в расширении имеют первую букву либо *.rxx либо *.hxx.
xx - это цифры. Они разные. Нужно оставить только с цифрами 01 и 16 (*.r01, *.r16, *.h01, *.h16). В папках ещё есть разные файлы. Остальные файлы в папках не удалять!!!!
PS. сработал только первый вариант...но почему то файл *.cmd удаляется после работы...(и удаляет все файлы - но теперь уточнил свою задачу)

amel27 10-06-2011 16:48 1692195

Цитата:

Цитата intersk
Файлы в расширении имеют первую букву либо *.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"


intersk 12-06-2011 00:57 1692921

Цитата:

Цитата amel27
[rh][0-9][0-9]" »

там попадаются расширения и .r108 и .h1454 (и по три и по четыре цифры)
значить нужно добавить ещё пару цифр в скобках? вот так
Цитата:

[rh][0-9][0-9][0-9][0-9]" »
но так уже не удаляются с двумя цифрами........

amel27 12-06-2011 06:26 1692960

Цитата:

Цитата intersk
но так уже не удаляются с двумя цифрами »

отбор файлов с 1 и более цифр на конце:
Код:

findstr/eir "\.[rh][0-9][0-9]*"
справка по FINDSTR:
Код:

help findstr|more

intersk 12-06-2011 14:10 1693104

всего звездочку нужно поставить - вот это логическая красота! такие тонкости знаешь!
а можно данный батник запаковать в какой исполняемый файл? (при запуске выбираешь целевую папку в которой надо "почистить" и по окончании список того что удалено)

amel27 12-06-2011 16:25 1693210

Цитата:

Цитата intersk
а можно данный батник запаковать в какой исполняемый файл? »

говорят можно - с помощью стороннего ПО, но этим не увлекаюсь и вам не советую,
если действительно надо - лучше посмотреть в сторону AutoIT/AHK
Цитата:

Цитата intersk
при запуске выбираешь целевую папку в которой надо "почистить" и по окончании список того что удалено»

для этого 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
)


intersk 12-06-2011 16:37 1693221

понятно, буду пользоваться простым способом - помещением батника в нужную папку. Тема решена!

intersk 15-06-2011 09:25 1694709

Цитата:

Цитата amel27
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" »

знакомые ребята-программисты сказали что способ оригинальный, интересный ))) я конечно сказал что это не я )) ещё раз спасибо!

intersk 22-06-2011 15:29 1699628

понадобилась модернизация командного файла )
Еще нужно поудалять файлы такие: они содержать в себе [название][_][цифры].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 у автора командного файла заранее прошу разрешения на указание его ника при пользовании командным файлом

amel27 22-06-2011 15:59 1699650

Цитата:

Цитата intersk
нужно поудалять файлы такие: они содержать в себе [название][_][цифры].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"'

intersk 23-06-2011 09:22 1700047

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
)

И чтобы в конце работы батника было "для закрытия окна нажмите любую клавишу"

amel27 23-06-2011 11:49 1700149

Цитата:

Цитата intersk
можно как то в "одну" строку уместить? »

ну если только сформулировать "одним" условием )

Цитата:

Цитата intersk
чтобы в конце работы батника было "для закрытия окна нажмите любую клавишу" »

Код:

echo для закрытия окна нажмите любую клавишу& pause>nul


Время: 15:18.

Время: 15:18.
© OSzone.net 2001-