Пример bat файла запуска программы с параметрами

Последний раз редактировалось arseniiv 04.05.2018, 21:30, всего редактировалось 1 раз.

Да, так. Если в параметре пробелы, его надо будет взять в прямые кавычки » , а если там и они, то не помню нюансы.

Re: Запуск батника с параметром
04.05.2018, 21:43

Однако, это проблема где-то с pdflatex: сделал, как рассказано здесь, все сработало. Да мне батник нужен для других целей: для запуска другого батника с параметром, пробегающим множество имен файлов. Вот я и выбрал команду pdflatex как, мне казалось, простейшую, для проверки верности вызова батника с параметром. Ладно, пока спасибо за помощь.

Re: Запуск батника с параметром
04.05.2018, 21:45

Последний раз редактировалось arseniiv 04.05.2018, 21:52, всего редактировалось 1 раз.

Для проверки, какие параметры получают какие значения, можно использовать echo (это встроенная команда, такую программу искать не нужно).

— Пт май 04, 2018 23:52:19 —

Типа там, echo Параметр 1: %1 , и выведется Параметр 1: .

Bat файл для запуска какого-либо файла

Re: Запуск батника с параметром
05.05.2018, 21:14

Последний раз редактировалось Sinoid 05.05.2018, 21:15, всего редактировалось 1 раз.

Не могу заставить %1 считать за параметр. Написал следующий батник:
echo off
cd /d %0..
chcp 1251
echo %%1 >> Obshij.txt
more < %%1.asy >> Obshij.txt
echo Параметр 1: %%1
pause

В результате получаю Obshij.txt, в нем %1, а в командной строке вот что:

C:Windowssystem32>echo off
Текущая кодовая страница: 1251
Не удается найти указанный файл.
Параметр 1: %1
Для продолжения нажмите любую клавишу . . .

arseniiv в сообщении #1310089 писал(а):
можно использовать echo (это встроенная команда, такую программу искать не нужно).

Я это знаю.
Re: Запуск батника с параметром
05.05.2018, 21:22

Последний раз редактировалось wrest 05.05.2018, 21:22, всего редактировалось 1 раз.

Sinoid
Вам сказали сделать так:
arseniiv в сообщении #1310089 писал(а):
echo Параметр 1: %1

А вы сделали так:
Sinoid в сообщении #1310290 писал(а):
echo Параметр 1: %%1

У вас на это были веские причины?
Re: Запуск батника с параметром
05.05.2018, 21:44
wrest в сообщении #1310291 писал(а):
У вас на это были веские причины?

Естественно, были: я это писал в батник. Сейчас попробовал (хотя и знал, что это ничего не изменит: во-первых, явно, неправильно, а, во-вторых, от этой команды результат не зависит, она служит только для контроля, но это, конечно, в данном случае тоже необходимо). Результат: в командной строке:

C:Windowssystem32>echo off
Текущая кодовая страница: 1251
Не удается найти указанный файл.
Параметр 1:
Для продолжения нажмите любую клавишу . . .


в текстовом файле все тот же один процент.
Re: Запуск батника с параметром
05.05.2018, 22:20

Последний раз редактировалось wrest 05.05.2018, 22:38, всего редактировалось 7 раз(а).

Интересные команды для файлов .BAT

Sinoid в сообщении #1310293 писал(а):
Результат: в командной строке:

Результат чего? Дайте полностью распечатку какие файлы запускали и что куда вводили.
И еще раз: что вы хотите сделать, подробнее напишите.
«Батники» с параметрами работают 10500 лет уже у всех и везде.

Вот такой bat-файл из 3 строчек, помещен в пользовательскую директорию, назван test.bat то есть полный путь к нему C:Userswresttest.bat

echo off
echo Parameter1: %1
echo Parameter2: %2

У меня при его запуске выдается так:

C:Userswrest>test.bat foo bar

C:Userswrest>echo off
Parameter1: foo
Parameter2: bar

Re: Запуск батника с параметром
05.05.2018, 23:43

Последний раз редактировалось arseniiv 05.05.2018, 23:46, всего редактировалось 1 раз.

Да, я что-то упустил двойные проценты. %% нужно указывать, чтобы получить сам символ % , так что %%1 даст при раскрытии переменных %1 и дальше раскрываться не будет . Программы получат строку %1 , но сами они уже обычно ничего особенного с ней делать не будут и будет скорее всего ошибка.

— Вс май 06, 2018 01:46:49 —

Кроме того, если нужно получить имя файла, у которого всё то же, а расширение сменено на другое (вижу %1.asy — тот ли это случай?), придётся засовывать между процентом и номером аргумента всякие буквы и тильды, чтобы извлечь из имени файла кусок; сейчас точно не помню какие.

Читайте также:
Как сделать программу мероприятия

Re: Запуск батника с параметром
06.05.2018, 13:43

Последний раз редактировалось Sinoid 06.05.2018, 13:56, всего редактировалось 1 раз.

wrest в сообщении #1310297 писал(а):
И еще раз: что вы хотите сделать, подробнее напишите.

В папке программы Asymptote есть папка examples, там файлы .asy с примерами кода, их там много. Я хочу запихать коды из тех файлов-примеров в один файл, перед каждым кодом вставить название файла, откуда он был взят, а после кода какие-нибудь отделительные знаки, думаю вставить = на всю строку. Написал такой батник (пока без отделительных знаков):

echo off
cd /d %0..
chcp 1251
for %%g in (*.asy) do echo %%~ng >> Obshij.txt
for %%f in (*.asy) do more < %%f >> Obshij.txt
pause

Как и следовало ожидать, вначале перечисляются имена, а потом коды. Решил использовать команду for: переменная пробегает множество имен файлов .asy и с каждым именем как с параметром запускает батник Vyvod2.bat. Сейчас написал Vyvod2.bat:

echo off
cd /d %0..
chcp 1251
echo %~n1 >> Obshij.txt
more < %~n1.asy >> Obshij.txt
echo Параметр 1: %~n1
pause

Он при вызове, например,
Vyvod2.bat bars3

(файл bars3 расширение .asy) делает, что задумано. Осталось написать Vyvod1.bat, запускающий Vyvod2.bat с каждым именем файла .asy. Пробовал так:

echo off
cd /d %0..
chcp 1251
for /f in (*.asy) do call Vyvod2.bat %~nf
pause

, да окно закрывается так быстро, что не успеваю прочитать, несмотря на команду pause.
Ваш батник
wrest в сообщении #1310297 писал(а):

echo off
echo Parameter1: %1
echo Parameter2: %2


работает, потому я и у себя в батниках поставил 1 процент.
arseniiv в сообщении #1310316 писал(а):

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


см. мои коды. А я и не знал, что это применимо и для аргументов.
Re: Запуск батника с параметром
06.05.2018, 16:25

Sinoid
Так делайте сразу в одном «батнике», зачем вам усложнения?
For . do (
Записываете разделитель
Записываете имя файла
Записываете содержимое файла )

Re: Запуск батника с параметром
06.05.2018, 17:29

Последний раз редактировалось Sinoid 06.05.2018, 17:38, всего редактировалось 1 раз.

Sinoid в сообщении #1310384 писал(а):

echo off
cd /d %0..
chcp 1251
for /f in (*.asy) do call Vyvod2.bat %~nf
pause


Увидел ошибку, переделал, странно, при таком батнике Vyvod1.bat:

echo off
cd /d %0..
chcp 1251
for %%f in (*.asy) do call Vyvod2.bat %%f
for %%g in (*.asy) do echo %%~ng >> imena.txt
pause

получаю требуемое только из первого .asy файла, при этом файла imena.txt вообще не образуется, а в командной строке выводится значение параметра, равным первому файлу. Короче, нет итерации. А при таком файле:

echo off
cd /d %0..
chcp 1251
rem for %%f in (*.asy) do call Vyvod2.bat %%f
for %%g in (*.asy) do echo %%~ng >> imena.txt
pause

получаю файл imena.txt со всеми именами файлов .asy, находящихся в папке.

wrest в сообщении #1310430 писал(а):

Sinoid
Так делайте сразу в одном «батнике», зачем вам усложнения?
For . do (
Записываете разделитель
Записываете имя файла
Записываете содержимое файла )

Так, значит, это работает? Я когда-то пытался так сделать, заставить сделать несколько операций на каждом шаге, не вышло, думал, что-то не так понял или показалось: не смог найти, где видел. Скажите, я еще видел, что несколько команд можно сцеплять > 1.txt

в результате файл 1.txt совпадает с логом только в первых 19 строках (лога), за исключением одной строки.

Re: Запуск батника с параметром
06.05.2018, 18:56

Последний раз редактировалось wrest 06.05.2018, 19:04, всего редактировалось 1 раз.

Sinoid
Работает. Возможно переменная не будет меняться в цикле, почитайте доки на For.

Читайте также:
Программа вместе мы можем больше

А зачем вы, кстати, кодовую страницу меняете?

Sinoid
Ещё call может вызывать не внешний файл а переходить к подпрограмме (метке) в текущем, причем в подпрограмму можно передать параметры. Почитайте доки про call.

Re: Запуск батника с параметром
06.05.2018, 20:22
wrest в сообщении #1310483 писал(а):

Прям батник из батника?
wrest в сообщении #1310483 писал(а):
А зачем вы, кстати, кодовую страницу меняете?

Так вот из-за этого
Sinoid в сообщении #1310482 писал(а):

в результате файл 1.txt совпадает с логом только в первых 19 строках (лога), за исключением одной строки.

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

wrest в сообщении #1310483 писал(а):
Ещё call может вызывать не внешний файл а переходить к подпрограмме (метке) в текущем

Так в моих же батниках, вроде, меток нет.
А все-таки, вы что-нибудь знаете про

Sinoid в сообщении #1310448 писал(а):
несколько команд можно сцеплять https://dxdy.ru/post1310316.html» target=»_blank»]dxdy.ru[/mask_link]

Входные параметры для командного файла

Существует возможность передать командному файлу параметры командной строки и использовать их значения в операторах самого командного файла.

В самом командном файле первый параметр будет доступен как переменная %1, второй — %2 и т.п. Имя самого командного файла доступно как переменная %0. Для примера создадим командный файл, задачей которого будет выдача на экран значений введенных параметров. Обычно для вывода текста используется команда

Однако если текст заменить на %1, — то будет выдан первый параметр, на %2 — второй и т.д.

Создаем файл parm.bat следующего содержания:

echo Первый параметр=%1

echo Второй параметр=%2

echo Третий параметр = %3

и запускаем его на выполнение следующей командой:

parm.bat FIRST second “two words”

после его выполнения вы поймете, как это работает и что параметры с пробелами, нужно заключать в двойные кавычки. Для того, чтобы обрабатываемые командным процессором строки не выдавались на экран, можно воспользоваться командой ECHO OFF, поместив ее в первую строку командного файла. Для того, чтобы строка командного файла игнорировалась командным процессором поместите в ее начало REM . Таким образом можно помещать комментарии, зачастую нелишние в больших командных файлах:

rem ECHO OFF выключает режим вывода содержания строк командного файла на экран

REM будет выводиться только результат их выполнения.

echo Первый параметр=%1

echo Второй параметр=%2

echo Третий параметр = %3

Переходы и метки

В командных файлах можно использовать команды условного перехода, меняющие логику их работы в зависимости от выполнения определенных условий. Для иллюстрации приемов использования условных переходов создадим командный файл, целью которого будет присвоение заранее определенной буквы диска для съемных носителей, в качестве которых будут использоваться флэш-диски. Условия таковы – есть 2 флэш-диска, один из которых должен быть виден в проводнике как диск X: а второй – как диск Y: независимо от того, в какой порт USB они подключены. Будем считать, что реальные диски могут быть подключены как F: или G: Опознавание дисков будем выполнять по наличию файла с определенным именем (лучше такой файл сделать скрытым в корневом каталоге и назвать его как-нибудь необычно):

Flashd1.let – на первом диске

Flashd2.let – на втором

Т.е. задача командного файла заключается в том, чтобы проверить наличие на сменных дисках F: и G: файлов Flashd1.let или Flashd2.let и, в зависимости от того, какой из них присутствует, присвоить диску букву X: или Y:

Для поиска файла на диске используем команду IF EXIST:

If exist имя_файла команда

В качестве команды проще всего воспользоваться SUBST, сопоставляющей имя диска и каталог.

SUBST X: C: — оздает виртуальный диск X:, содержимым которого будет корневой каталог диска C:

Создаем командный файл setXY.bat со следующими строками:

IF EXIST G:flashd1.let SUBST X: G:

IF EXIST F:flashd1.let SUBST X: F:

IF EXIST G:flashd2.let SUBST Y: G:

Читайте также:
Где найти код активации на касперского в программе

IF EXIST F:flashd2.let SUBST Y: F:

После выполнения такого файла у вас появятся диски X: и Y: Но если такой файл выполнить повторно, команда SUBST выдаст сообщение об ошибке – ведь диски X: и Y: уже существуют.

Желательно обойти выполнение SUBST, если виртуальные диски X: и Y: уже созданы, (или удалять их, используя SUBST с параметром –d перед подключением ). Модифицируем командный файл с использованием GOTO — передачи управления строке пакетного файла по метке.

Метка должна находиться в отдельной строке и начинаться с двоеточия. Сделаем изменения в нашем командном файле, чтобы не возникало сообщений об ошибке:

REM если не существует X: — то перейдем на метку SETX

IF NOT EXIST X: GOTO SETX

REM если существует X: — перейдем на проверку наличия Y:

IF EXIST G:flashd1.let SUBST X: G:

IF EXIST F:flashd1.let SUBST X: F:

REM если Y: существует – завершим командный файл.

IF EXIST Y: GOTO EXIT

IF EXIST G:flashd2.let SUBST Y: G:

IF EXIST F:flashd2.let SUBST Y: F:

REM выход из командного файла

Сообщение об ошибке SUBST исчезло. Признаки ошибок при выполнении команд можно отслеживать и в самом командном файле, анализируя переменную ERRORLEVEL, значение которой формируется при выполнении большинства программ. ERRORLEVEL равно 0, если программа завершилась без ошибок и 1 – при возникновении ошибки. Могут быть и другие значения, если они предусмотрены в выполняемой программе.

В качестве команды в строке командного файла можно использовать также командный файл. Причем, для передачи с возвратом обратно к точке выполнения вызывающего командного файла используется команда CALL . Создадим командный файл test.bat, следующего содержания:

ECHO Вызов 1.bat

И файл 1.bat, содержащий команду PAUSE, приостанавливающую выполнение командного файла до нажатия любой клавиши.

При выполнении test.bat будет выдано на экран сообщение

и управление получит 1.bat с командой pause. После начатия клавиши на клавиатуре управление получит командная строка “ECHO Возврат.” и на экран будет выдано

Если же в test.bat убрать CALL , то возврат из файла 1.bat выполняться не будет. Кстати, используя передачу управления командному файлу, можно организовать его зацикливание. Попробуйте добавить в конец файла test.bat строку:

Выйти из зацикливания командного файла можно по нажатию комбинации CTRL-Break. Возможно использование команды CALL для вызова процедуры внутри командного файла. В этом случае в качестве аргумента используется не имя внешнего файла, а метка: . call :proc1 . :proc1 . exit .

Источник: studfile.net

Пример bat файла запуска программы с параметрами

Краткий справочник по использованию параметров для bat (и cmd) файлов.

Параметр Описание
%1 Стандартный параметр
%~f1 Расширяет %1 до полного пути к файлу. Если вы только ввели имя файла, этот параметр расширит его включением драйва/директории
%~d1 Извлекает имя драйва из %1.
%~p1 Извлекает путь из %1
%~n1 Извлекает имя файла из %1, но без расширения
%~x1 Извлекает расширение файла из %1
%~s1 Изменяет длинное имя и расширение файла до стандартного 8.3; используется как %~sn1 для короткого имени файла и как %~sx1 для короткого расширения

Можно объединить несколько параметров:

Параметр Описание
%~dp1 Расширяет %1 только до имени драйва и пути
%~nx1 Расширяет %1 только до имени и расширения файла

Запущенный bat-файл не загружается в память сразу, он считывает и выполняет команды по одной. Поэтому, если во время выполнения одной из команд изменить содержимое bat-файла, то при выполнении следующей команды будут срабатывать только что внесённые изменения.

[Проверка наличия параметра]

Проверить наличие определенного параметра в bat-файле можно оператором if [%1]==[] goto, пример:

goto :eof

Этот же пример показывает, как можно экранировать действие специальных символов (в данном примере это символы < и >) с помощью символа ^.

[Проверка значения параметра]

Пример командного файла, который ожидает в первом параметре значение -a или -b:

if «%1″==»-a» goto printA
if «%1″==»-b» goto printB
goto wrong_arg
:printA

Источник: microsin.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru