Показать полную графическую версию : [решено] можно ли определить количество параметров команды?
GoodFella
07-12-2010, 01:09
Поясню задачу:
в консоли вызываю свой бат-файл, передавая ему какую-то последовательность команд, например: dir md d:\abc\123 copy a.txt b.txt
Мне надо, чтобы мой бат-файл запускал поочередно все эти команды. Так вот вопрос, как можно узнать, для какой из списка команд следующее за ним слово ( или группа слов) является параметром команды, а какая команда выполняется без передачи таковых?
Извините, если продублировал чей-то вопрос.
Спасибо!
GoodFella, в общем случае - никак, так как "dir md d:\abc\123" можно интерпретировать как две команды либо как одну - листинг каталогов ".\MD" и "d:\abc\123", я уж не говорю о том, что любой EXE-файл может оказаться как командой, так и параметром... так что придется вводить свои правила, по которым делить входной поток на команды... например, брать команды с параметрами в кавычки (при условии, что кавычки не используются в самих параметрах), отделять специальными токенами и т.п.
если используемых команд немного, можно просто сверять каждый параметр обычным IF /I, но с учетом отмеченных ограничений
Попробуйте так:
test.bat@Echo Off
For /F "tokens=1-12 delims=," %%a In ("%*") Do (
Call :_run %%a
Call :_run %%b
Call :_run %%c
Call :_run %%d
Call :_run %%e
Call :_run %%f
Call :_run %%g
Call :_run %%h
Call :_run %%i
Call :_run %%j
Call :_run %%k
Call :_run %%l
)
Pause
Exit
:_run
Set t=%*
If Defined t Echo %t%
Запуск, например, такой командой:test.bat dir,md "d:\abc\123",copy "a.txt" "b.txt",del /s /q "name abc.txt" Команда Echo для тестов, удалить для исполнения команд. Число команд в примере до 12, но можно увеличить до 52.
GoodFella
07-12-2010, 10:31
спасибо!) Очень помогли советами! как-то про использование разделителей сам не дошел)
GoodFella
08-12-2010, 09:17
хм.. а еще вопрос.
если при вызове моего test.bat напишу 3 команды, то все равно у меня Call будет выполняться 12 раз? Только в тех оставшихся 9 случаях самой команде Call будет передан пустой символ "" ?
Можно ли сделать, чтобы если у меня пользователь написал 3 команды, call выполнялся тоже ровно три раза? и на этом цикл заканчивался?
Спасибо!
(1) если при вызове моего test.bat напишу 3 команды, то все равно у меня Call будет выполняться 12 раз? (2) Только в тех оставшихся 9 случаях самой команде Call будет передан пустой символ "" ?
(3) Можно ли сделать, чтобы если у меня пользователь написал 3 команды, call выполнялся тоже ровно три раза? (4) и на этом цикл заканчивался? »
1 Да
2 Да, только остальные 9 ничего делать не будут, т.к., в п\программе проверяется наличие параметра
3 Call можно вообще исключить, эта команда здесь применена только для переноса проверки наличия параметра из цикла в п\программу и уменьшения кода.
4 Число циклов определяется в параметре tokens=1-12
Досрочный выход можно легко организовать:@Echo Off
For /F "tokens=1-12 delims=," %%a In ("%*") Do (
Call :_run %%a
Call :_run %%b
Call :_run %%c
Call :_run %%d
Call :_run %%e
Call :_run %%f
Call :_run %%g
Call :_run %%h
Call :_run %%i
Call :_run %%j
Call :_run %%k
Call :_run %%l
)
Pause
Exit
:_run
Set t=%*
If Defined t (Echo %t%) Else (Pause&Exit)
GoodFella
08-12-2010, 14:35
спасибо за помощь!
только почему-то когда удаляю команду Echo, оставив : If Defined t (%t%) Else (Pause&Exit) у меня выдает сообщение на экран : Непредвиденное появление: ).
Попробуйте так:...
:_run
Set t=%*
If Not Defined t Pause&Exit
Echo %t%Если не получится, то приведите здесь свою ком. строку запуска
GoodFella
08-12-2010, 15:29
все, теперь работает нормально!
спасибо за помощь!)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.