CMD/BAT - [решено] можно ли определить количество параметров команды?
-
GoodFella
CMD/BAT - [решено] можно ли определить количество параметров команды?
Поясню задачу:
в консоли вызываю свой бат-файл, передавая ему какую-то последовательность команд, например: dir md d:\abc\123 copy a.txt b.txt
Мне надо, чтобы мой бат-файл запускал поочередно все эти команды. Так вот вопрос, как можно узнать, для какой из списка команд следующее за ним слово ( или группа слов) является параметром команды, а какая команда выполняется без передачи таковых?
Извините, если продублировал чей-то вопрос.
Спасибо!
в консоли вызываю свой бат-файл, передавая ему какую-то последовательность команд, например: dir md d:\abc\123 copy a.txt b.txt
Мне надо, чтобы мой бат-файл запускал поочередно все эти команды. Так вот вопрос, как можно узнать, для какой из списка команд следующее за ним слово ( или группа слов) является параметром команды, а какая команда выполняется без передачи таковых?
Извините, если продублировал чей-то вопрос.
Спасибо!
-
amel27
Re: CMD/BAT - [решено] можно ли определить количество параметров команды?
GoodFella, в общем случае - никак, так как "dir md d:\abc\123" можно интерпретировать как две команды либо как одну - листинг каталогов ".\MD" и "d:\abc\123", я уж не говорю о том, что любой EXE-файл может оказаться как командой, так и параметром... так что придется вводить свои правила, по которым делить входной поток на команды... например, брать команды с параметрами в кавычки (при условии, что кавычки не используются в самих параметрах), отделять специальными токенами и т.п.
если используемых команд немного, можно просто сверять каждый параметр обычным IF /I, но с учетом отмеченных ограничений
если используемых команд немного, можно просто сверять каждый параметр обычным IF /I, но с учетом отмеченных ограничений
-
gora
Re: CMD/BAT - [решено] можно ли определить количество параметров команды?
Попробуйте так:
test.bat
Код:
Запуск, например, такой командой:
Код:
Команда Echo для тестов, удалить для исполнения команд. Число команд в примере до 12, но можно увеличить до 52.
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
Re: CMD/BAT - [решено] можно ли определить количество параметров команды?
спасибо!) Очень помогли советами! как-то про использование разделителей сам не дошел)
-
GoodFella
Re: CMD/BAT - [решено] можно ли определить количество параметров команды?
хм.. а еще вопрос.
если при вызове моего test.bat напишу 3 команды, то все равно у меня Call будет выполняться 12 раз? Только в тех оставшихся 9 случаях самой команде Call будет передан пустой символ "" ?
Можно ли сделать, чтобы если у меня пользователь написал 3 команды, call выполнялся тоже ровно три раза? и на этом цикл заканчивался?
Спасибо!
если при вызове моего test.bat напишу 3 команды, то все равно у меня Call будет выполняться 12 раз? Только в тех оставшихся 9 случаях самой команде Call будет передан пустой символ "" ?
Можно ли сделать, чтобы если у меня пользователь написал 3 команды, call выполнялся тоже ровно три раза? и на этом цикл заканчивался?
Спасибо!
-
gora
Re: CMD/BAT - [решено] можно ли определить количество параметров команды?
Цитата GoodFella:
(1) если при вызове моего test.bat напишу 3 команды, то все равно у меня Call будет выполняться 12 раз? (2) Только в тех оставшихся 9 случаях самой команде Call будет передан пустой символ "" ?
(3) Можно ли сделать, чтобы если у меня пользователь написал 3 команды, call выполнялся тоже ровно три раза? (4) и на этом цикл заканчивался?
1 Да
2 Да, только остальные 9 ничего делать не будут, т.к., в п\программе проверяется наличие параметра
3 Call можно вообще исключить, эта команда здесь применена только для переноса проверки наличия параметра из цикла в п\программу и уменьшения кода.
4 Число циклов определяется в параметре tokens=1-12
Досрочный выход можно легко организовать:
Код:
(1) если при вызове моего test.bat напишу 3 команды, то все равно у меня Call будет выполняться 12 раз? (2) Только в тех оставшихся 9 случаях самой команде Call будет передан пустой символ "" ?
(3) Можно ли сделать, чтобы если у меня пользователь написал 3 команды, call выполнялся тоже ровно три раза? (4) и на этом цикл заканчивался?
CMD/BAT - [решено] можно ли определить количество параметров команды?
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
Re: CMD/BAT - [решено] можно ли определить количество параметров команды?
спасибо за помощь!
только почему-то когда удаляю команду Echo, оставив : If Defined t (%t%) Else (Pause&Exit) у меня выдает сообщение на экран : Непредвиденное появление: ).
только почему-то когда удаляю команду Echo, оставив : If Defined t (%t%) Else (Pause&Exit) у меня выдает сообщение на экран : Непредвиденное появление: ).
-
gora
Re: CMD/BAT - [решено] можно ли определить количество параметров команды?
Попробуйте так:
Код:
Если не получится, то приведите здесь свою ком. строку запуска
Код:
Код: Выделить всё
...
:_run
Set t=%*
If Not Defined t Pause&Exit
Echo %t%Если не получится, то приведите здесь свою ком. строку запуска
-
GoodFella
Re: CMD/BAT - [решено] можно ли определить количество параметров команды?
все, теперь работает нормально!
спасибо за помощь!)
спасибо за помощь!)