|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] можно ли определить количество параметров команды? |
|
CMD/BAT - [решено] можно ли определить количество параметров команды?
|
Новый участник Сообщения: 7 |
Поясню задачу:
в консоли вызываю свой бат-файл, передавая ему какую-то последовательность команд, например: dir md d:\abc\123 copy a.txt b.txt Мне надо, чтобы мой бат-файл запускал поочередно все эти команды. Так вот вопрос, как можно узнать, для какой из списка команд следующее за ним слово ( или группа слов) является параметром команды, а какая команда выполняется без передачи таковых? Извините, если продублировал чей-то вопрос. Спасибо! |
|
Отправлено: 01:09, 07-12-2010 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать GoodFella, в общем случае - никак, так как "dir md d:\abc\123" можно интерпретировать как две команды либо как одну - листинг каталогов ".\MD" и "d:\abc\123", я уж не говорю о том, что любой EXE-файл может оказаться как командой, так и параметром... так что придется вводить свои правила, по которым делить входной поток на команды... например, брать команды с параметрами в кавычки (при условии, что кавычки не используются в самих параметрах), отделять специальными токенами и т.п.
если используемых команд немного, можно просто сверять каждый параметр обычным IF /I, но с учетом отмеченных ограничений |
Отправлено: 08:35, 07-12-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить 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% |
Отправлено: 08:55, 07-12-2010 | #3 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать спасибо!) Очень помогли советами! как-то про использование разделителей сам не дошел)
|
Отправлено: 10:31, 07-12-2010 | #4 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать хм.. а еще вопрос.
если при вызове моего test.bat напишу 3 команды, то все равно у меня Call будет выполняться 12 раз? Только в тех оставшихся 9 случаях самой команде Call будет передан пустой символ "" ? Можно ли сделать, чтобы если у меня пользователь написал 3 команды, call выполнялся тоже ровно три раза? и на этом цикл заканчивался? Спасибо! |
|
Отправлено: 09:17, 08-12-2010 | #5 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата GoodFella:
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
|
Профиль | Отправить PM | Цитировать спасибо за помощь!
только почему-то когда удаляю команду Echo, оставив : If Defined t (%t%) Else (Pause&Exit) у меня выдает сообщение на экран : Непредвиденное появление: ). |
Отправлено: 14:35, 08-12-2010 | #7 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать |
Отправлено: 15:10, 08-12-2010 | #8 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать все, теперь работает нормально!
спасибо за помощь!) |
Отправлено: 15:29, 08-12-2010 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|