Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - *CMD/BAT*.Помогите с батником.

Ответить
Настройки темы
CMD/BAT - *CMD/BAT*.Помогите с батником.

Аватара для pingUIN

Пользователь


Сообщения: 137
Благодарности: 7

Профиль | Отправить PM | Цитировать


Изменения
Автор: pingUIN
Дата: 07-06-2007
Описание: Оформление по правилам раздела.
Подскажите как написать правильно командный файл, который:
- выводил бы по одному имена всех файлов из указанного каталога, соответствующих указанной маске

- каталог и маска указываются из командной строки и передаются в командный файл как параметры
-если не указана маска, применяется маска *.*
-если не указан каталог, обрабатывается текущий каталог.

У меня пока получилось выводить все файлы из каталога откуда запускается прога
Код: Выделить весь код
pusd

@echo off

for %%i in (*.*) do @echo %%i

pause
update

Код: Выделить весь код
@echo off

IF  (как этот параметр настроить, если не указывается %2, подставлялась маска *.*)

pushd %1


for %%i in (%2) do @echo %%i

popd

pause

-------
здесь был администратор 8)


Отправлено: 15:24, 07-06-2007

 

Аватара для Greyman

Человек


Сообщения: 3313
Благодарности: 104

Профиль | Отправить PM | Цитировать


Перенес из "ХВЗ" в "Програмирование"...

-------
Будь проще...


Отправлено: 16:04, 07-06-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для pingUIN

Пользователь


Сообщения: 137
Благодарности: 7

Профиль | Отправить PM | Цитировать


Разобрался с этим батником, теперь проблема с другим. =\


Код: Выделить весь код
@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
что дальше понятия не имею

:(

-------
здесь был администратор 8)


Последний раз редактировалось pingUIN, 07-06-2007 в 18:37.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:42, 07-06-2007 | #3


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


pingUIN
Цитата:
1. файл разархивируется.
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
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:27, 08-06-2007 | #4


Аватара для pingUIN

Пользователь


Сообщения: 137
Благодарности: 7

Профиль | Отправить PM | Цитировать


Чтоб в дальнейшем по проще было можешь дать краткое пояснение ?
Мне вот хочется понять
Код: Выделить весь код
в 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')

Един-ое, что не понятно, это ключевое выражение
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:42, 08-06-2007 | #5


Аватара для yurfed

Ветеран


Сообщения: 20045
Благодарности: 3122

Профиль | Отправить PM | Цитировать


pingUIN Зайди в Задачи на bat-файлах на Ru-Board.
Более ста страниц форума посвящено этой теме. Наверняка что нибудь найдёшь для себя.

Пакет утилит для организации интерфейса в BAT(CMD)-программах

-------
Хочу ли я - Могу ли я - Говно ли я - Магнолия


Последний раз редактировалось yurfed, 08-06-2007 в 10:29.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:57, 08-06-2007 | #6


Аватара для pingUIN

Пользователь


Сообщения: 137
Благодарности: 7

Профиль | Отправить PM | Цитировать


Да мне бы щас просто пояснение услышать, а за ссылку большое спасибо.

Цитата amel27:
примерно так, только нужно вбить каталог, в котором искать архивы со всеми подкаталогами:
Код:
Код: Выделить весь код
@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 метрового файла выдрать то что нужно

-------
здесь был администратор 8)


Последний раз редактировалось pingUIN, 08-06-2007 в 15:34. Причина: не понятно

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:11, 08-06-2007 | #7


Аватара для pingUIN

Пользователь


Сообщения: 137
Благодарности: 7

Профиль | Отправить PM | Цитировать


Может кто подсказать, если я не указал значение 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 не могу разобраться.

-------
здесь был администратор 8)


Отправлено: 15:44, 08-06-2007 | #8


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


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 которая возвращает путь к каталогу с батником
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:55, 09-06-2007 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - *CMD/BAT*.Помогите с батником.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Не запускаются .bat .cmd файлы aifam Microsoft Windows 2000/XP 28 18-03-2021 00:30
Разное - [решено] перезагрузка из .bat или .cmd San_dr Программирование и базы данных 7 03-08-2011 01:58
CMD/BAT - [решено] Помогите запустить CMD-файл из CMD-файла с параметрами Oleg48 Скриптовые языки администрирования Windows 2 18-11-2009 11:08
Помогите пожалуйста не срабатывает команда из*cmd файла запускаемого из RanOnceEx.cmd vovchiku Автоматическая установка Windows 2000/XP/2003 6 25-09-2007 23:38
BAT-файлы в WindowsXP (окно CMD) Alick Microsoft Windows 2000/XP 4 14-12-2005 00:03




 
Переход