Откройте командный файл и выполните команды оттуда

282
Zoltán Csáti

Мое намерение состоит в том, чтобы запустить скрипт perl latexdiff.plиз переносимой версии perl. Существует пакетный файл, portableshell.batкоторый устанавливает среду для Perl. Если я открою его и наберу perl latexdiff.pl additional_arguments, программа работает хорошо. Тем не менее, я хочу автоматизировать это. Я создал командный файл useLatexdiff.batи поместил в него следующее:

portableshell.bat perl ..\MiKTeX\texmfs\install\scripts\latexdiff\latexdiff.pl 

Среда perl настроена правильно, но вторая строка не выполняется. Как мне добиться выполнения второй строки?

Примечание: это общий вопрос. Другой вариант использования - открыть оболочку Unix и после этого выполнить команды Unix из этой оболочки.

2

1 ответ на вопрос

0
LPChip

Ваша проблема в том, что пакетный файл работает следующим образом: он выполняет команду и ожидает ее завершения, прежде чем перейти к следующему.

Так что в вашем случае он ждет в portableshell.bat, пока не завершится, что, вероятно, не произойдет.

К счастью, есть несколько методов, которые вы можете сделать, чтобы выполнить команду и перейти к следующей, не дожидаясь окончания первой. Для вызова пакетных файлов вы можете использовать call filename.bat, чтобы вызвать его и сразу же перейти к следующей строке.

Ваш командный файл будет выглядеть так:

call portableshell.bat perl ..\MiKTeX\texmfs\install\scripts\latexdiff\latexdiff.pl 

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

Хотя вышеприведенное должно работать, в противном случае вы можете отредактировать файл portableshell.bat и добавить команду perl в самом конце.

Проблема в том, что `portableshell.bat`, вероятно, открывает окно оболочки, в которой должна быть выполнена следующая команда внутри и вне этого окна оболочки, среда все еще не" настроена ", так как это переносимое приложение. Случайный запуск perl после пакетного файла, вероятно, приведет к ошибке `file not found`. Мне кажется, что это может быть проще всего написать с помощью AutoIt или AutoHotkey. Mokubai 6 лет назад 0
Помещение команды `call` впереди ничего не изменило. @Mokubai Я работаю над набором взаимодействующих портативных программ на USB-ключе. AutoIt или AutoHotkey нужны дополнительные программы для работы? Если возможно, я бы остался с командной строкой Windows. Zoltán Csáti 6 лет назад 0
Разве вы не можете просто отредактировать файл portableshell.bat и поместить команду perl в самый конец? LPChip 6 лет назад 0
@LPChip Спасибо, работа команды perl в конце файла `portableshell.bat` - хотя и не очень модульная - работает. Вы можете добавить свой ответ, чтобы другим пользователям было легче его найти. Zoltán Csáti 6 лет назад 0