2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3, 4, 5, 6  След.
 
 Запуск батника с параметром
Сообщение04.05.2018, 20:27 


03/06/12
2872
Здравствуйте! Написал батник такого содержания:
Код:
cd /d %0\..
pdflatex %%1

Подскажите, пожалуйста, как его запускать сразу с параметром из командной строки? Как указано здесь,
Код:
bat.bat param1 param2

(в моем случае, понятно, параметр 1) верно или нет?

 Профиль  
                  
 
 Re: Запуск батника с параметром
Сообщение04.05.2018, 21:24 
Заслуженный участник


27/04/09
28128
Да, так. Если в параметре пробелы, его надо будет взять в прямые кавычки ", а если там и они, то не помню нюансы.

 Профиль  
                  
 
 Re: Запуск батника с параметром
Сообщение04.05.2018, 21:43 


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

 Профиль  
                  
 
 Re: Запуск батника с параметром
Сообщение04.05.2018, 21:45 
Заслуженный участник


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

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

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

 Профиль  
                  
 
 Re: Запуск батника с параметром
Сообщение05.05.2018, 21:14 


03/06/12
2872
Не могу заставить %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:\Windows\system32>echo off
Текущая кодовая страница: 1251
Не удается найти указанный файл.
Параметр 1: %1
Для продолжения нажмите любую клавишу . . .


-- 05.05.2018, 22:15 --

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

Я это знаю.

 Профиль  
                  
 
 Re: Запуск батника с параметром
Сообщение05.05.2018, 21:22 


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

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

У вас на это были веские причины?

 Профиль  
                  
 
 Re: Запуск батника с параметром
Сообщение05.05.2018, 21:44 


03/06/12
2872
wrest в сообщении #1310291 писал(а):
У вас на это были веские причины?

Естественно, были: я это писал в батник. Сейчас попробовал (хотя и знал, что это ничего не изменит: во-первых, явно, неправильно, а, во-вторых, от этой команды результат не зависит, она служит только для контроля, но это, конечно, в данном случае тоже необходимо). Результат: в командной строке:
Код:
C:\Windows\system32>echo off
Текущая кодовая страница: 1251
Не удается найти указанный файл.
Параметр 1:
Для продолжения нажмите любую клавишу . . .

в текстовом файле все тот же один процент.

 Профиль  
                  
 
 Re: Запуск батника с параметром
Сообщение05.05.2018, 22:20 


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

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

-- 05.05.2018, 22:33 --

Вот такой bat-файл из 3 строчек, помещен в пользовательскую директорию, назван test.bat то есть полный путь к нему C:\Users\wrest\test.bat
Код:
echo off
echo Parameter1: %1
echo Parameter2: %2

У меня при его запуске выдается так:
Код:
C:\Users\wrest>test.bat foo bar

C:\Users\wrest>echo off
Parameter1: foo
Parameter2: bar

C:\Users\wrest>

 Профиль  
                  
 
 Re: Запуск батника с параметром
Сообщение05.05.2018, 23:43 
Заслуженный участник


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

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

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

 Профиль  
                  
 
 Re: Запуск батника с параметром
Сообщение06.05.2018, 13:43 


03/06/12
2872
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 


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

 Профиль  
                  
 
 Re: Запуск батника с параметром
Сообщение06.05.2018, 17:29 


03/06/12
2872
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, находящихся в папке.

-- 06.05.2018, 18:38 --

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

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

 Профиль  
                  
 
 Re: Запуск батника с параметром
Сообщение06.05.2018, 18:52 


03/06/12
2872
Все! Получилось! Странное, однако, дело: написал такой батник:
Код:
cd /d %0\..
chcp 1251
pdflatex Vyvod.tex >> 1.txt

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

 Профиль  
                  
 
 Re: Запуск батника с параметром
Сообщение06.05.2018, 18:56 


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

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

-- 06.05.2018, 19:04 --

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

 Профиль  
                  
 
 Re: Запуск батника с параметром
Сообщение06.05.2018, 20:22 


03/06/12
2872
wrest в сообщении #1310483 писал(а):
Работает

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

Так вот из-за этого
Sinoid в сообщении #1310482 писал(а):
в результате файл 1.txt совпадает с логом только в первых 19 строках (лога), за исключением одной строки.

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


Так в моих же батниках, вроде, меток нет.
А все-таки, вы что-нибудь знаете про
Sinoid в сообщении #1310448 писал(а):
несколько команд можно сцеплять &-ом

?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 79 ]  На страницу 1, 2, 3, 4, 5, 6  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group