CMD/BAT - [решено] можно ли определить количество параметров команды?

Ответить
Аватара пользователя
GoodFella

CMD/BAT - [решено] можно ли определить количество параметров команды?

Сообщение GoodFella »

Поясню задачу:

в консоли вызываю свой бат-файл, передавая ему какую-то последовательность команд, например: dir md d:\abc\123 copy a.txt b.txt

Мне надо, чтобы мой бат-файл запускал поочередно все эти команды. Так вот вопрос, как можно узнать, для какой из списка команд следующее за ним слово ( или группа слов) является параметром команды, а какая команда выполняется без передачи таковых?

Извините, если продублировал чей-то вопрос.

Спасибо!
Аватара пользователя
amel27

Re: CMD/BAT - [решено] можно ли определить количество параметров команды?

Сообщение amel27 »

GoodFella, в общем случае - никак, так как "dir md d:\abc\123" можно интерпретировать как две команды либо как одну - листинг каталогов ".\MD" и "d:\abc\123", я уж не говорю о том, что любой EXE-файл может оказаться как командой, так и параметром... так что придется вводить свои правила, по которым делить входной поток на команды... например, брать команды с параметрами в кавычки (при условии, что кавычки не используются в самих параметрах), отделять специальными токенами и т.п.



если используемых команд немного, можно просто сверять каждый параметр обычным IF /I, но с учетом отмеченных ограничений
Аватара пользователя
gora

Re: CMD/BAT - [решено] можно ли определить количество параметров команды?

Сообщение gora »

Попробуйте так:

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 »

спасибо!) Очень помогли советами! как-то про использование разделителей сам не дошел)
Аватара пользователя
GoodFella

Re: CMD/BAT - [решено] можно ли определить количество параметров команды?

Сообщение GoodFella »

хм.. а еще вопрос.

если при вызове моего test.bat напишу 3 команды, то все равно у меня Call будет выполняться 12 раз? Только в тех оставшихся 9 случаях самой команде Call будет передан пустой символ "" ?

Можно ли сделать, чтобы если у меня пользователь написал 3 команды, call выполнялся тоже ровно три раза? и на этом цикл заканчивался?

Спасибо!
Аватара пользователя
gora

Re: CMD/BAT - [решено] можно ли определить количество параметров команды?

Сообщение gora »

Цитата GoodFella:



(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 - [решено] можно ли определить количество параметров команды?

Сообщение GoodFella »

спасибо за помощь!

только почему-то когда удаляю команду Echo, оставив : If Defined t (%t%) Else (Pause&Exit) у меня выдает сообщение на экран : Непредвиденное появление: ).
Аватара пользователя
gora

Re: CMD/BAT - [решено] можно ли определить количество параметров команды?

Сообщение gora »

Попробуйте так:

Код:

Код: Выделить всё

...
:_run
Set t=%*
If Not Defined t Pause&Exit
Echo %t%

Если не получится, то приведите здесь свою ком. строку запуска
Аватара пользователя
GoodFella

Re: CMD/BAT - [решено] можно ли определить количество параметров команды?

Сообщение GoodFella »

все, теперь работает нормально!

спасибо за помощь!)
Ответить

Вернуться в «Скриптовые языки администрирования Windows»