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

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

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

Новый участник


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

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


Поясню задачу:
в консоли вызываю свой бат-файл, передавая ему какую-то последовательность команд, например: dir md d:\abc\123 copy a.txt b.txt
Мне надо, чтобы мой бат-файл запускал поочередно все эти команды. Так вот вопрос, как можно узнать, для какой из списка команд следующее за ним слово ( или группа слов) является параметром команды, а какая команда выполняется без передачи таковых?
Извините, если продублировал чей-то вопрос.
Спасибо!

Отправлено: 01:09, 07-12-2010

 

Googler


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

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


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

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

Отправлено: 08:35, 07-12-2010 | #2



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

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


Аватара для gora

Ушёл из жизни


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

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


Попробуйте так:
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.

Отправлено: 08:55, 07-12-2010 | #3


Новый участник


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

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


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

Отправлено: 10:31, 07-12-2010 | #4


Новый участник


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

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


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

Отправлено: 09:17, 08-12-2010 | #5


Аватара для gora

Ушёл из жизни


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

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


Цитата GoodFella:
(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)

Отправлено: 10:09, 08-12-2010 | #6


Новый участник


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

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


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

Отправлено: 14:35, 08-12-2010 | #7


Аватара для gora

Ушёл из жизни


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

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


Попробуйте так:
Код: Выделить весь код
...
:_run
Set t=%*
If Not Defined t Pause&Exit
Echo %t%
Если не получится, то приведите здесь свою ком. строку запуска

Отправлено: 15:10, 08-12-2010 | #8


Новый участник


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

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


все, теперь работает нормально!
спасибо за помощь!)

Отправлено: 15:29, 08-12-2010 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как определить количество установленной памяти в ХР с помошью .cmd .bat? xaosxaos Скриптовые языки администрирования Windows 17 28-03-2017 23:57
[решено] можно ли определить - AT или ATX? truvo Хочу все знать 11 03-12-2010 06:33
Система - Можно ли ограничить количество памяти выделяемой программе? multy Программное обеспечение Windows 0 08-09-2010 13:55
как можно определить IP – адрес по (URL) super_Spartan Хочу все знать 5 13-03-2009 16:20
[решено] Можно сделать, чтобы в InputBox вводилось сразу несколько параметров а не один??? sashadeg AutoIt 8 03-03-2009 17:41




 
Переход