В поисках правильного метода запуска .bat-скрипта, при котором cmd
окно останется активным после завершения, я узнал, что один из двух популярных методов — включить cmd /k file.bat
в скрипт строку, в которой «file.bat» ссылается на себя.
Хотя я понимаю функциональный результат вышеизложенного, я не могу понять, как — концептуально — это выполняется и разрешается правильно?
По моему собственному необразованному умозаключению, я думаю, что это как-то связано с аргументом /k
, функция которого объясняется следующим образом:
Выполняет команду, указанную строкой, но остается
Тем не менее, даже если это позволяет скрипту предотвратить зацикливание, как это не нарушает его собственное выполнение?
Извините, если это слишком очевидно или если я не понимаю чего-то фундаментального, у меня нет формального образования или подготовки по этой теме.
РЕДАКТИРОВАТЬ:
Ну, это было глупо с моей стороны! Я увидел в ответездесьчто синтаксис был организован так, как я указал выше... которыйделаетзациклить сценарий, так что мне следовало бы сначала проверить самому, прежде чем слепо верить без надлежащего контекста (и я всегда говорю "доверяй, но проверяй", какой лицемер
решение1
Что касается того, почему это cmd
решает, есть пара хороших объяснений наПереполнение стека- по сути cmd
интерпретируется как %ComSpec%
, что является переменной среды вашей системы для полного расположения cmd.exe (обычно C:\Windows\System32\cmd.exe
).
Что касается контекста вашего вопроса - если у вас cmd /k yourbatfile.bat
внутри yourbatfile.bat, он просто зациклится. Если вы хотите, чтобы ваше окно оставалось открытым по причинам устранения неполадок, я настоятельно рекомендую просто добавить a pause
в конце/после любого раздела(ов), с которым у вас возникли проблемы.
Формулировка /k
дляздесь немного по-другомупоскольку он говорит, что «возвращает в командную строку» — по сути, добавление /k
похоже на открытие cmd.exe и его использование, а отсутствие /k
— на выполнение команды из окна «Выполнить».
Вы можете проверить это, открыв «Выполнить» и выполнив команду ipconfig /all
— ваше окно закроется сразу после ipconfig
завершения; но если вы откроете «Выполнить» и выполните команду cmd /k ipconfig /all
— ваше окно вернет вас в командную строку.