1

Я пытаюсь запустить несколько простых командных команд в одной партии.
В этом отношении каждая команда является пакетной командой следующим образом:

 rails generate scaffold illness name:string
 rails generate scaffold ingredient name:string origin_id:integer

Теперь вместо выполнения всех 30 команд мой пакетный файл запускается только первым и возвращается к строке приглашения. Поэтому я должен запустить его вручную.

2 ответа2

4

Вы должны поместить слово call перед командным файлом ...

@echo off
call rails generate scaffold illness name:string
call ralis generate scaffold ingredient name:string origin_id:integer

Это предполагает, что "rails" - это действительно rails.bat.

4

Хотя предыдущий ответ от jftuga является правильным, более полный ответ выглядит следующим образом:

@echo off
call rails generate scaffold illness name:string
call ralis generate scaffold ingredient name:string origin_id:integer

Вы должны поместить вызов перед каждой строкой в командном файле, который является внешней командой, запускающей новый процесс, если вы хотите, чтобы сценарий продолжался после каждого вызова. Поэтому внутренние команды, такие как DIR и COPY, не требуют вызова. Но при запуске новой командной строки или даже другого командного файла управление полностью передается этой программе, если только слово CALL не находится в начале строки. На самом деле, новая командная строка вернет управление обратно в командный файл после его выхода .

Некоторые программы приостанавливаются во время работы, но после завершения возвращаются к следующей строке командного файла. В следующем пакетном файле сценарий будет останавливаться одинаково после каждого вызова Блокнота и начинаться после выхода из Блокнота (оба раза). Таким образом, они фактически одинаковы.

notepad.exe
call notepad.exe
echo    It came back.

Но при вызове другого пакетного файла полный контроль передается новому процессу, если нет вызова впереди. Таким образом, в следующем коде первый вызов bat-файла вернется после завершения, но второй никогда не вернется, поэтому последняя строка эха никогда не будет запущена. 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .