Выполнение нескольких команд из сценария Windows cmd - PullRequest
133 голосов
/ 13 октября 2008

Я пытаюсь написать сценарий Windows cmd для выполнения нескольких последовательных задач. Однако он всегда останавливается после первой команды в сценарии.

Команда, после которой она останавливается, является сборкой maven (не уверен, что это актуально).

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

Установка любого программного обеспечения или настройка реестра и т. Д. Полностью исключена - боюсь, что она должна работать на ванильной установке Windows XP.

В идеале я бы хотел, чтобы скрипт был прерван, если какая-либо из команд завершилась неудачно, но это "приятно иметь", но не обязательно.

Спасибо.

Ответы [ 8 ]

136 голосов
/ 13 октября 2008

Когда вы вызываете другой файл .bat, я думаю, что вам нужно "позвонить" перед вызовом:

call otherCommand.bat
45 голосов
/ 13 октября 2008

Вы можете использовать символ && между командами для выполнения второй команды, только если первая выполнена успешно. Больше информации здесь http://commandwindows.com/command1.htm

25 голосов
/ 13 октября 2008

Не уверен, почему первая команда останавливается. Если вы можете сделать это параллельно, вы можете попробовать что-то вроде

start cmd.exe /C 1.bat      
start cmd.exe /C 2.bat
23 голосов
/ 21 октября 2011

Я только что выполнил ту же самую задачу (ish) по созданию пакетного скрипта для запуска тестовых скриптов maven. Проблема в том, что вызов maven scrips с помощью mvn clean install ... сам по себе является сценарием, поэтому его необходимо выполнить с помощью вызова mvn clean install.

Код, который будет работать

rem run a maven clean install
cd C:\rbe-ui-test-suite 
call mvn clean install
rem now run through all the test scripts
call mvn clean install -Prun-integration-tests -Dpattern=tc-login
call mvn clean install -Prun-integration-tests -Dpattern=login-1

Обратите внимание на использование вызова. Это позволит использовать последовательные сценарии maven в командном файле.

4 голосов
/ 24 сентября 2017

Использование двойных амперсандов запускает вторую команду, только если первая удалась:

cd Desktop/project-directory && atom .

Где как, при использовании только одного амперсанда будет пытаться выполнить обе команды, даже если первая не удалась:

cd Desktop/project-directory & atom .
1 голос
/ 14 декабря 2010

Если вы работаете в Windows, вы можете использовать следующую команду.

Привод:

cd "Script location"
schtasks /run /tn "TASK1"
schtasks /run /tn "TASK2"
schtasks /run /tn "TASK3"
exit
1 голос
/ 13 октября 2008

Я не знаю прямого ответа на ваш вопрос, но если вы делаете много этих сценариев, возможно, стоит изучить более мощный язык, такой как perl. Для Windows существуют бесплатные реализации (например, activestate, cygwin). Я нашел, что это стоило начальных усилий для моих собственных задач.

Edit:

По предложению @Ferruccio, если вы не можете установить дополнительное программное обеспечение, рассмотрите vbscript и / или javascript. Они встроены в хост скриптов Windows.

0 голосов
/ 25 июля 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...