Показать полную графическую версию : *CMD/BAT*.Помогите с батником.
Подскажите как написать правильно командный файл, который:
- выводил бы по одному имена всех файлов из указанного каталога, соответствующих указанной маске
- каталог и маска указываются из командной строки и передаются в командный файл как параметры
-если не указана маска, применяется маска *.*
-если не указан каталог, обрабатывается текущий каталог.
У меня пока получилось выводить все файлы из каталога откуда запускается прога
pusd
@echo off
for %%i in (*.*) do @echo %%i
pause
update http://kolobok.us/smiles/light_skin/gamer3.gif
@echo off
IF (как этот параметр настроить, если не указывается %2, подставлялась маска *.*)
pushd %1
for %%i in (%2) do @echo %%i
popd
pause
Перенес из "ХВЗ" в "Програмирование"...
Разобрался с этим батником, теперь проблема с другим. =\
@echo off
pushd %1
IF "%2"=="" goto n2
for %%i in (%2) do @echo %%i
goto n3
:n2
SET nol=*.*
for %%i in (%nol%) do @echo %%i
:n3
popd
pause
Второй вариант.
@echo off
pushd %1
SET nol=%2
IF "%2"=="" SET nol=*.*
for %%i in (%nol%) do @echo %%i
popd
pause
upd
Нужно создать такой батник, чтобы он просматривал каталог, заползал в папку(в первую, во вторую и т.д) находит .rar файл, брал заархивированный файл, разархивировал его потом вызывал удаленный батник через call , а тот батник который запускался бы производил бы поиск определенного текста в разархивированном файле. (поиск текста, при помощи юниксовой утилиты grep для винды) после нахождения текст вписывается в отдельный файл, а тот в котором производился поиск удалялся.
07.06.2007 17:19 <DIR> 20070420
07.06.2007 17:19 <DIR> 20070421
07.06.2007 17:19 <DIR> 20070422
07.06.2007 17:36 104 name.bat то что в каталоге (там папки в которых нужно производить поиск)
upd
В удаленном батнике содержание такое grep -h -A 1 -E "err" *.log>>E:\result.lst
нужна подсказка, плиз хелп.
Суть программы
1. файл разархивируется.
2.Поиск в этом файле, запись найденого результата
3. Удаление файла в котором производился поиск.
И если у меня в папке несколько файлов заархивированных то нужно, чтобы все происходило по очередно, т.е. в папке
1.rar
2.rar
3.rar
Нужно, чтоб сначало разархивился 1.rar файл который был в архиве извлекается в тек каталог, в нем производится поиск(в извлеченном файле), результаты поиска записываются в E:\result.lst
В файле в котором производился поиск удаляется (архив остается на месте), потом идет 2.rar
for %%i in (*.rar) do rar что дальше понятия не имею
:(
pingUIN1. файл разархивируется.
2.Поиск в этом файле, запись найденого результата
3. Удаление файла в котором производился поиск.примерно так, только нужно вбить каталог, в котором искать архивы со всеми подкаталогами:@echo off
SET ROOT=C:\TEST
for /f "tokens=* delims=" %%i in ('DIR /S /B %ROOT%\*.rar') do (
CD /D %%~dpi
rar e %%~nxi *.log
grep -h -A 1 -E "err" *.log >>E:\result.lst
del /F/Q *.log
)
Чтоб в дальнейшем по проще было можешь дать краткое пояснение ?
Мне вот хочется понять
в for /f указывал "tokens=* delims=" - что обозначают эти ключевые слова разбора.(в справке запутанное объяснение
CD /D %%~dpi
rar e %%~nxi *.log
%~dpI = Замена %I именем диска и путем.
%~nxI = Замена %I именем файла и расширением.
как доступно понять это выражение.
Просто второй день и мозг кипит уже.
Спасибо за внимание.
uptd.
Если я правильно понял то в случае с %%~dpi и %%~nxi
Все пути и расширения берутся из
for /f "tokens=* delims=" %%i in ('DIR /S /B %ROOT%\*.rar')
Един-ое, что не понятно, это ключевое выражение
pingUIN Зайди в Задачи на bat-файлах (http://forum.ru-board.com/topic.cgi?forum=62&topic=6156&start=0) на Ru-Board.
Более ста страниц форума посвящено этой теме. Наверняка что нибудь найдёшь для себя.
Пакет утилит для организации интерфейса в BAT(CMD)-программах (http://my-cms.jino-net.ru/index.php?cap=hsp)
Да мне бы щас просто пояснение услышать, а за ссылку большое спасибо.
примерно так, только нужно вбить каталог, в котором искать архивы со всеми подкаталогами:
Код:
@echo off
SET ROOT=C:\TEST
for /f "tokens=* delims=" %%i in ('DIR /S /B %ROOT%\*.rar') do (
CD /D %%~dpi
rar e %%~nxi *.log
grep -h -A 1 -E "err" *.log >>E:\result.lst
del /F/Q *.log
)
У меня вопрос, реально сделать, так чтобы в главном батнике, который дает команды на разархивацию небыло вызова GREP, а был удаленный вызов батника call батник лежит допустим E:\1\ там же где и и основной.
Просто в батнике с grep я могу задавать условия поиска в один файл количество совпадений, а в другой сами результаты.
UPDATE
можно как нибудь оттянуть выполнение команды del секунд на 30, 40 ?
Времени не хватает, чтобы из 70 метрового файла выдрать то что нужно
Может кто подсказать, если я не указал значение ROOT как мне сделать, чтоб за путь считался текущий каталог (с папками) откуда был произведен запуск ?
@echo off
SET ROOT=%1
IF "%1"=="" SET ROOT= что за значение подставлять, не знаю =\
rem если например использовать goto каким выражением можно будет воспользоваться
for /f "tokens=* delims=" %%i in ('DIR /S /B %ROOT%\*.rar') do (
CD /D %%~dpi
rar e %%~nxi *.log
grep -h -A 1 -E "err" *.log >>E:\result.lst
del /F/Q *.log
)
Вместо set
SET ROOT=%1
IF "%1"=="" goto v1
for /f "........" %%i итакдалее
:v1
for /f "tokens=* delims=" %%i in ('DIR /S /B *.rar') do (
CD /D %%~dpi
rar e %%~nxi *.log
)
А есть где нибудь FAQ для чайников про консольный режим winrar'а с флагом x не могу разобраться.
pingUIN
Един-ое, что не понятно, это ключевое выражениеdelims - разделители на подстроки-токены (по умолчанию пробел и табулятор), tokens- какие токены включать в обработку (в данном случае необязателен)... Тут все подробно расписано: http://www.robvanderwoude.com/ntfor.html
так чтобы в главном батнике, который дает команды на разархивацию небыло вызова GREP, а был удаленный вызов батника call батник лежит допустим E:\1\ ну дык поставь вместо вызова grep строку типа "CALL E:\1\grep.cmd".
можно как нибудь оттянуть выполнение команды del секунд на 30, 40 ?зачем, если все команды должны выполняться последовательно?
как мне сделать, чтоб за путь считался текущий каталог 'DIR /S /B *.rar' или использовать вместо ROOT подстановку %~dp0 которая возвращает путь к каталогу с батником
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.