Несколько способов вызвать пакетный файл Windows из другого или из приглашения. Какой в каком случае?
Пакетный файл Windows (called.bat
или called.cmd
) может быть вызван из другого пакетного файла (caller.bat
или caller.cmd
) или интерактивного приглашения cmd.exe несколькими способами:
- прямой звонок:
called.bat
- используя команду
call called.bat
: call called.bat
- с помощью команды cmd:
cmd/c called.bat
- с помощью команды
start called.bat
: start called.bat
У меня большие проблемы с разграничением их предполагаемого использования по тексту справки: когда и какой? например, почему я мог бы использовать команду "call" вместо прямого вызова. Что отличается?
Меня интересует какой-то сводный отчет, в котором анализируются все 4 возможности (и другие, если таковые отсутствуют) с разных точек зрения: рекомендуемые варианты использования, для которых они предназначены, порождение процесса, контекст выполнения, среда, обработка кода возврата.
Примечание: я использую Windows XP SP3.
Ответы
Ответ 1
-
Пакетный файл будет выполнен текущим экземпляром cmd.exe(или новым экземпляром cmd.exe, если, например, дважды щелкнул в проводнике).
-
То же, что и # 1, имеет эффект только при использовании внутри пакета /cmd файла. В пакетном файле без "вызова" родительский пакетный файл заканчивается и управление переходит к вызываемому пакетному файлу; с 'call' запускает дочерний пакетный файл, а родительский пакетный файл продолжается с операторами следующего вызова.
-
Запускает командный файл в новом экземпляре cmd.exe.
-
Start запустит командный файл в новом экземпляре cmd.exe в новом окне, и вызывающий не будет ждать завершения.
Ответ 2
Непонятно из комментариев здесь: когда вы вызываете один пакетный файл из другого, используя только его имя (случай №1 в исходном вопросе), выполнение останавливается из вызывающего пакетного файла. Например, в этих строках:
called.bat
echo Hello
Строка 'echo Hello' (и все, что после нее) не будет вызываться. Если вы используете ключевое слово "вызов", выполнение возобновляется после вызова. Итак, в этом случае:
call called.bat
echo Hello
Вызывается строка "echo Hello".
Кроме того, все переменные, заданные в файле named.bat, также передаются обратно в вызывающий процесс.
Представьте файл 'named.bat', который имеет следующую строку:
set MYVAR=hello
Затем% MYVAR% будет доступен для вызывающего пакетного файла, если он используется:
call called.bat
Но он не будет использовать
REM starts a new cmd.exe process
start called.bat
REM stops and replaces current cmd.exe process with a new one
called.bat