Я пытаюсь запустить несколько простых пакетных команд в одном пакете.
В этом отношении каждая команда является пакетной командой следующим образом:
rails generate scaffold illness name:string
rails generate scaffold ingredient name:string origin_id:integer
Теперь вместо запуска всех 30 команд мой пакетный файл запускает только первую и возвращается к строке приглашения. Поэтому мне приходится запускать его вручную.
решение1
Вам необходимо поместить слово call
в начало пакетного файла...
@эхо выкл. вызов рельсов сгенерировать болезнь скаффолда имя:строка вызов ralis сгенерировать scaffold ингредиент имя:строка origin_id:целое число
Это предполагает, что «rails» на самом деле — rails.bat.
решение2
Хотя предыдущий ответ jftuga верен, более полный ответ выглядит следующим образом:
@echo off
call rails generate scaffold illness name:string
call ralis generate scaffold ingredient name:string origin_id:integer
Вам нужно разместитьвызовперед каждой строкой в пакетном файле, которая является внешней командой, запускающей новый процесс, если вы хотите, чтобы скрипт продолжался после каждого вызова. Поэтому внутренние команды, такие как DIR и COPY, не требуют вызова. Но запуск новой командной строки или даже другого пакетного файла полностью передает управление этой программе, если только словоВЫЗОВнаходится в начале очереди. На самом деле, новая командная строка передаст управление обратно пакетному файлу, как только выВыходэто.
Некоторые программы будут останавливаться во время выполнения, но возвращаться к следующей строке пакетного файла после завершения. В следующем пакетном файле скрипт будет останавливаться одинаково после каждого вызова Notepad и начинаться после выхода из Notepad (оба раза). Так что они фактически одинаковы.
notepad.exe
call notepad.exe
echo It came back.
Но при вызове другого пакетного файла полное управление передается новому процессу, если только нет вызова впереди. Таким образом, в следующем коде первый вызов bat-файла вернется после завершения, но второй никогда не вернется, поэтому последняя строка echo никогда не будет запущена. call firstBatch.bat SecondBatch.bat echo Вы никогда не увидите эту строку
Я не уверен, как работает команда rails, но, похоже, это похоже на пакетный сеанс. Возможно, это был пакетный файл. Первые два вызова cmd не вернутся, пока вы не введете exit в этом случае, вернув вас в более раннюю оболочку.вызовне имеет значения. Но третий использует переключатель /c, который говорит выполнить команду и вернуться автоматически. Если вы хотите сохранить новый сеанс cmd активным после отправки команды, используйте переключатель /K. Для получения дополнительной справки по этому вопросу:cmd /?
cmd
call cmd
cmd /c dir
echo You will see this after typing Exit twice to leave two new instances of cmd. The third instance returned automatically.