Выполнение нескольких команд из сценария Windows cmd

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

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

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

Об установке какого-либо программного обеспечения или настройке реестра и т. д. Совершенно не может быть и речи - я боюсь, что это должно работать на обычной установке Windows XP.

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

Спасибо.

Вероятно, вы пытаетесь запустить bat-файл. Проверь это -> stackoverflow.com/a/64720570/388389

npocmaka 10.11.2020 01:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
139
1
276 933
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Ответ принят как подходящий

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

call otherCommand.bat

Привет, в исходном скрипте я не вызывал другие файлы .cmd, но с тех пор разбил их на отдельные файлы, чтобы можно было запускать каждый по очереди. Итак, размещение вызова перед каждой командой, похоже, помогло, спасибо!

Darren Greaves 13.10.2008 19:48

Фактически, в Windows mvn сам по себе является файлом .bat, поэтому для него нужно использовать call, как в call mvn install; обычно вам не нужно создавать дополнительный файл cmd.

jfpoilpret 13.09.2012 12:17

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

Pushkar 25.07.2014 12:31

@Gulzar Nazim - Знаете ли вы, могу ли я поместить все команды в один пакетный файл с оператором if-else, поскольку я не хочу поддерживать его в разных пакетных файлах?

Ng2-Fun 26.08.2016 22:49

Ирония заключается в том, что ответ указывает на противоположную сторону вопроса, и тем не менее он получает 120 голосов.

Giridhar Karnik 20.04.2017 17:05

Я пытался сделать что-то подобное с обновлениями npm и тестами protractor. Я не думал, что этот ответ применим ко мне, пока я не понял, что npm и protractor являются файлами .cmd в Windows.

joshden 20.04.2017 23:32

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

Редактировать:

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

Спасибо, но я не могу установить какое-либо программное обеспечение. Хотел бы я иметь доступ к чему-то более мощному, чем дрянной язык сценариев Windows. :-(

Darren Greaves 13.10.2008 19:34

Вы всегда можете использовать vbscript или javascript. Они встроены в хост сценариев Windows.

Ferruccio 13.10.2008 19:42

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

Спасибо, я попробую вместе с принятым ответом выше.

Darren Greaves 13.10.2008 19:49

Остановит ли это выполнение второго скрипта, если сборка maven завершится неудачно?

Varun Achar 14.05.2013 11:07

Эта ссылка не работает: «Внутренний сервер не ответил вовремя. Сервер приложений слишком занят и не может вовремя обрабатывать запросы».

kevinji 16.07.2013 23:17

Может кто-нибудь объяснить мне, почему calc && echo foo приводит к запуску калькулятора и немедленной печати "foo"? Как я могу запустить calc таким образом, чтобы он блокировал оболочку Windows, как это делает bash без &?

Mitja 25.06.2014 04:02

@TheM Windows различает приложения на основе графического интерфейса и приложения на основе команд (в начале EXE-файла есть флажок). Если вы запускаете приложение на основе графического интерфейса пользователя из командной строки, оно всегда немедленно завершается, поскольку полностью отсоединено от командной строки. Если вы запустите программу на основе команд из программы с графическим интерфейсом (например, Explorer), она всегда будет отображать новую командную строку. Системы POSIX не делают такого различия, поэтому поведение более согласованное.

coderforlife 02.07.2014 21:48

@TheM Чтобы обойти это, вы можете использовать start /B /WAIT calc

coderforlife 02.07.2014 21:56

@coderforlife Я согласен с тем, что такое поведение несколько непоследовательно, но, по крайней мере, есть способ сделать это. Спасибо!

Mitja 04.07.2014 06:18

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

start cmd.exe /C 1.bat      
start cmd.exe /C 2.bat

Используйте /K вместо /C, если вы хотите, чтобы оболочка оставалась открытой после выполнения вашей команды.

JellicleCat 26.04.2011 22:18

Не нужно использовать cmd.exe и start, достаточно start x.bat1.

user66001 14.12.2013 02:42

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

Водить машину:

cd "Script location"
schtasks /run /tn "TASK1"
schtasks /run /tn "TASK2"
schtasks /run /tn "TASK3"
exit

Я только что выполнял ту же самую (иш) задачу по созданию пакетного сценария для запуска тестовых сценариев maven. Проблема в том, что вызов сценариев maven с помощью 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

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

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

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

cd Desktop/project-directory && atom .

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

cd Desktop/project-directory & atom .

Другие вопросы по теме