Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
бутафор
0 / 0 / 1
Регистрация: 05.10.2010
Сообщений: 43
1

Обработка списка параметров запуска пакетного файла

06.03.2015, 20:49. Просмотров 2969. Ответов 16
Метки нет (Все метки)

Добрый вечер. Помогите решить задачу, плиз. Нужно создать пакетный файл для запуска программ. Командные строки запускаемых программ передаются через параметры строки запуска пакетного файла. Количество параметров запускаемых программ заранее не определено. Например, запуск по очереди программ Edit, Dir и Mem, перечисленных со своими параметрами в командной строке запуска, как показано далее:
d:\work\x1.bat Edit f1.txt ; Dir d:\work ; Mem /d.

Нашел на форуме похожую тему вот с таким кодом, но оно не работает:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
if "%1"=="" echo Using %0 Program1 Parameter1 ; Program2 Parameter2 ...&Goto :eof
echo Start executing commands...
set tmpx= %1
 
:m1
shift
if not "%1"==";" if not "%1"=="" (set tmpx=%tmpx% %1& Goto :m1)
if defined tmpx start "" /wait %tmpx:~1%
if "%1"=="" goto :end
set tmpx=
goto :m1
 
:end
echo Finishing...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2015, 20:49
Ответы с готовыми решениями:

Создание пакетного файла с использованием списка значений в качестве параметров.
Посмотрите, пожалуйста, задание: Создайте пакетный файл P3 с использованием списка значений...

Переделать код пакетного файла для его запуска с аргументами
Здравия желаю, существует такой батник: title create chcp 1251 @echo off set /p...

Планирование запуска пакетного файла первого числа каждого месяца в 23:55
3. Планирование запуска пакетного файла ShutDown.CMD, находящегося в системной папке SCRIPTS....

Проверка числа параметров и превращение пакетного файла в интерактивный
Необходима помощь! Есть задание: • Создать один или несколько пакетных файлов, которые содержат...

Применение оператора IF для сравнения с определёнными строками параметров пакетного файла
Подскажите пожалуйста как записать.... Если %1 равен пустому значению "" , то AVC=%1 и Если %2...

16
ComSpec
3409 / 1953 / 628
Регистрация: 26.02.2014
Сообщений: 1,457
06.03.2015, 22:47 2
Лучший ответ Сообщение было отмечено бутафор как решение

Решение

Код пакетного файла "x1.bat":
Bash
1
@cd /d "%~dp0"& for %%i in (%*) do @start "" /b /wait %%~i& pause
.
Командная строка для запуска на примере других команд (команды с параметрами заключаютя в двойные кавычки и разделяются пробелами):
Bash
1
"D:\Work\x1.bat" "notepad D:\Work\f1.txt" "cmd /c dir "D:\Work"" "calc"
.
Примечание: команду "dir D:\Work" заменил на более удобную в Вашем случае "cmd /c dir "D:\Work"".
3
olichka86
2 / 2 / 2
Регистрация: 29.10.2013
Сообщений: 80
24.05.2015, 22:24 3
Бьюсь над этой же задачей, один в один, видно, в одном и том же ВУЗе.
Дело в том, что если разделять их пробелами да группировать кавычками, проблемы с решением и правда нет.
Но возможно ли решить эту задачу в примером, который в самой задаче задан: аргументы, разделенные ";"? Как то их распарсить? Пробовала через /F "delims=;" но не выходит ничего.
0
ComSpec
3409 / 1953 / 628
Регистрация: 26.02.2014
Сообщений: 1,457
25.05.2015, 11:00 4
Цитата Сообщение от olichka86 Посмотреть сообщение
Но возможно ли решить эту задачу в примером, который в самой задаче задан: аргументы, разделенные ";"? Как то их распарсить? Пробовала через /F "delims=;" но не выходит ничего.



Цитата Сообщение от бутафор Посмотреть сообщение
Windows Batch file
1
d:\work\x1.bat Edit f1.txt ; Dir d:\work ; Mem /d

Windows Batch file
1
@for /f "tokens=1-3 delims=;" %%i in ("%*") do @call %%i& call %%j& call %%k
3
olichka86
2 / 2 / 2
Регистрация: 29.10.2013
Сообщений: 80
25.05.2015, 11:43 5
Цитата Сообщение от ComSpec Посмотреть сообщение
Windows Batch file
1
@for /f "tokens=1-3 delims=;" %%i in ("%*") do @call %%i& call %%j& call %%k
Прошу прощение за настырность... но сделать батник универсальным и обработать неизвестное количество команд не выйдет никак, да?
С tokens=* не хочет работать.

Пока вдохновилась самым первым примером и пытаюсь через temp и shift что-то создать вменяемое...
0
Dragokas
Эксперт WindowsАвтор FAQ
17053 / 7109 / 860
Регистрация: 25.12.2011
Сообщений: 10,920
Записей в блоге: 16
25.05.2015, 12:33 6
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Цитата Сообщение от бутафор Посмотреть сообщение
Нашел на форуме похожую тему вот с таким кодом, но оно не работает:
"Мой" это код. И он работал нормально до тех пор, пока его кто-то не взял и не перековеркал.
Знаки ";" не передаются как отдельные аргументы (воспринимаются как разделитель), если только их не окружить кавычками.

Цитата Сообщение от ComSpec Посмотреть сообщение
Windows Batch file
1
@for /f "tokens=1-3 delims=;" %%i in ("%*") do @call %%i& call %%j& call %%k
Для неограниченного числа разделителей:

Windows Batch file
1
2
3
4
5
6
@echo off
SetLocal EnableExtensions
set "args=%*"
:cycle
for /F "tokens=1* delims=;" %%i in ("%args%") do %%~i& set args=%%j& if defined args goto cycle
pause >NUL
3
olichka86
2 / 2 / 2
Регистрация: 29.10.2013
Сообщений: 80
26.05.2015, 12:16 7
Цитата Сообщение от Dragokas Посмотреть сообщение
Знаки ";" не передаются как отдельные аргументы (воспринимаются как разделитель), если только их не окружить кавычками.
Вот спасибо-то! Все воскресенье убила на попытки понять, почему же оно не реагирует на мои if "%1" == ";". И еще бы полгода мучилась.

Добавлено через 1 час 39 минут
Ребята, у меня почти получилось... Только я хотела еще, чтобы программа могла обрабатывать команды, разделенные, как в примере, точкой с запятой и пробелом. Сделала для этого второй цикл, и все бы хорошо, но ума не приложу, как склеить в итоге команду с параметрами...

Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
set "args=%*"
:CYCLE1
for /F "tokens=1* delims=;" %%i in ("%args%") do set tmp=%%i& set args=%%j& goto CYCLE2
:CYCLE2
for /F "tokens=1* delims= " %%k in ("%tmp%") do %%k %%n& goto LABEL1
:LABEL1
if defined args (goto CYCLE1) else echo.& echo Work finished.
pause
Вот тут ошибка:
Windows Batch file
1
do %%k %%n& goto LABEL1
, а как их правильно объединить, ума не приложу!...

Подаю на вход: P3.bat notepad P1.bat; notepad P3.bat; calc; dir d:

Добавлено через 1 час 10 минут
Свершилось! Оно рабооотает!)

Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
set "args=%*"
:CYCLE1
for /F "tokens=1* delims=;" %%i in ("%args%") do set tmp=%%i& set args=%%j& goto CYCLE2
:CYCLE2
for /f "tokens=* delims= " %%a in ("%tmp%") do set tmp=%%a& %tmp%& goto LABEL1
:LABEL1
if defined args (goto CYCLE1) else echo.& echo Work finished.
pause
Нашла вот тут: http://www.celitel.info/klad/nhelp/helpbat.php?dcmd=ex_string
Удаление ведущих пробелов.
Windows Batch file
1
2
3
4
set str=        Не ждите чуда, чудите сами
echo."%str%"
for /f "tokens=* delims= " %%a in ("%str%") do set str=%%a
echo."%str%"
Работает. Правда, мозг пока отказывается понимать, почему...
Зато задача решена на 100% как в условии. Фух.
0
Dragokas
Эксперт WindowsАвтор FAQ
17053 / 7109 / 860
Регистрация: 25.12.2011
Сообщений: 10,920
Записей в блоге: 16
26.05.2015, 12:31 8
Ваши примеры некорректны. Зачем что-то было добавлять, если выложенный код и так был самодостаточен.
Лидирующие пробелы не имеет смысла удалять, т.к. они ни на что не влияют. Этим Вы только лишний раз усложнили код.
1
olichka86
2 / 2 / 2
Регистрация: 29.10.2013
Сообщений: 80
26.05.2015, 16:38 9
Может быть и так, но когда я запускала Ваш код у себя с P3.bat notepad P1.bat; notepad P3.bat; calc; dir d:, мне выдавало следующее сообщение:
0
Миниатюры
Обработка списка параметров запуска пакетного файла  
ComSpec
3409 / 1953 / 628
Регистрация: 26.02.2014
Сообщений: 1,457
26.05.2015, 16:53 10
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Цитата Сообщение от ComSpec Посмотреть сообщение
Windows Batch file
1
@for /f "tokens=1-3 delims=;" %%i in ("%*") do @call %%i& call %%j& call %%k

Также добавьте "call":
Windows Batch file
5
for /F "tokens=1* delims=;" %%i in ("%args%") do call %%~i& set args=%%j& if defined args goto cycle
.
2
olichka86
2 / 2 / 2
Регистрация: 29.10.2013
Сообщений: 80
26.05.2015, 16:58 11
Спасибо! Как все просто... А я-то левой пяткой правое ухо доставала)
0
AlinaGl
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 2
01.12.2015, 16:44 12
Добрый день! В универе выдали такое же задание, перепробовала много вариантов, перепробовала вышеописанные варианты, но ничего не работает...
Также нужно создать пакетный файл P3 для запуска программ. Командные строки запускаемых программ передаются через параметры строки запуска Р3. Количество параметров запускаемых программ заранее не определено. Например, запуск по очереди программ Edit, Dir и Mem, перечисленных со своими параметрами в командной строке запуска Р3, как показано далее:
d:\work\d1>P3.bat Edit f1.txt ; Dir d:\work ; Mem /d

Буду благодарна за любую помощь!
0
Summerty
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 5
01.12.2015, 17:03 13
Цитата Сообщение от AlinaGl Посмотреть сообщение
Добрый день! В универе выдали такое же задание, перепробовала много вариантов, перепробовала вышеописанные варианты, но ничего не работает...
Также нужно создать пакетный файл P3 для запуска программ. Командные строки запускаемых программ передаются через параметры строки запуска Р3. Количество параметров запускаемых программ заранее не определено. Например, запуск по очереди программ Edit, Dir и Mem, перечисленных со своими параметрами в командной строке запуска Р3, как показано далее:
d:\work\d1>P3.bat Edit f1.txt ; Dir d:\work ; Mem /d
Буду благодарна за любую помощь!
Это БГУИР чтоли?)
0
vavun
9866 / 5235 / 802
Регистрация: 07.04.2013
Сообщений: 15,192
01.12.2015, 17:05 14
AlinaGl, Summerty, еще скажите одногруппники
0
Summerty
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 5
01.12.2015, 17:17 15
Цитата Сообщение от vavun Посмотреть сообщение
еще скажите одногруппники
Не, я закончил год назад) Но задания такие были по архитектуре ОС
0
AlinaGl
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 2
01.12.2015, 18:01 16
Да, БГУИР И да, АОС... Одна только проблема: все вышеперечисленное я испробовала... Не работает
0
Dragokas
Эксперт WindowsАвтор FAQ
17053 / 7109 / 860
Регистрация: 25.12.2011
Сообщений: 10,920
Записей в блоге: 16
01.12.2015, 18:26 17
Тогда рассказывайте нам, каким образом Вы пробовали и почему решили, что не работает.

Добавлено через 2 минуты
Предыдущий коллега вон тоже пробовал, даже успел заявил, что сломанный кем-то код так и был написан (мной).
0
01.12.2015, 18:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2015, 18:26

Ошибка при выполнении пакетного файла: "Недопустимое число параметров"
@echo off cls set WORKLW=C: set WORKDIR=10Work set LANG=ru-RU echo Select the Windows...

Как в коде пакетного файла скрыть расположение исполняемого файла?
Есть исполняемый файл на диске С, в папке ПрограмФайл, на рабочем столе создан файл запуска BAT с...

Создание исполняемого файла на основе пакетного файла и копируемых им файлов
Доброго времени суток. Батник копирует файлы из папки Test в папку bin в текущем каталоге. Мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru