Держите CMD открытым после выполнения файла BAT

169

У меня есть файл летучей мыши, как это:

ipconfig

Это выведет IP-информацию на экран, но прежде чем пользователь сможет прочитать эту информацию, CMD закроется.

Я считаю, что CMD предполагает, что скрипт завершен, поэтому он закрывается.

Как сохранить CMD открытым после завершения скрипта?

pattyd
источник
1
Dupe из stackoverflow.com/ru/questions/988403/…
Роб Килти
4
@RobKielty это тот же вопрос, хорошо - но здесь у нас есть новый ответ (который лучше ИМХО)
alfasin
@alfasin Разве это не то же самое, что ответ Рутгера Нийлунсинга?
Роб Келти
@RobKielty Нет, мой ответ не совпадает с тем, что он не использует, pauseчто является хорошим обходным путем (и именно поэтому я проголосовал за этот ответ), но не тот, который действительно решает проблему, потому что после того, как пользователь нажмет Enterили Spaceокно закроется. ..
Альфасин

Ответы:

163

В зависимости от того, как вы выполняете команду, вы можете поставить /kпосле, cmdчтобы оставить окно открытым.

cmd /k my_script.bat

Простое добавление cmd /kв конец вашего командного файла тоже будет работать. Благодарим Луиджи Д'Амико, который написал об этом в комментариях ниже.

Джейсон Шиндлер
источник
14
После того, как все ваши сценарии в вашем файле bat - положить -> cmd / k
Luigi D'Amico
3
Помните, что если ваша программа содержит синтаксические ошибки, окно все равно закроется, если вы запустили его двойным щелчком и поставили cmd /kв конец.
Тобиас Фейл
Это не объясняет закрытие окон cmd, если пользователь дважды щелкнул файл.
К - Токсичность в СО растет.
238

Поместите pauseв конец вашего .BAT файла.

ElGavilan
источник
7
Это именно то, что я искал, потому что я запускаю файл bat при запуске, а не через команду CMD. +1
Ястребиный глаз
3
Если вы все еще хотите взаимодействовать с файлом bat после выполнения, замените PAUSE просто cmd / k - тогда после запуска ваших сценариев вы все равно сможете запускать ручные команды в том же контексте
Luigi D'Amico
Я не могу смириться с тем, что это не было «решением» комментария к этому вопросу
newhouse
57

Просто добавьте @pauseв конце.

Пример:

@echo off
ipconfig
@pause

Или вы также можете использовать:

cmd /k ipconfig
ZygD
источник
5
что делает символ @? Есть ли разница между @pause и pause?
demonicdaron
3
@demonicdaron Ответ, объясняющий символ @: stackoverflow.com/a/21077142/2258
Ричард Морган,
Но в этом случае это не должно иметь никакого значения.
Флориан Лейтгеб
Разницу между @pauseи pauseможно увидеть визуально в этом ответе: stackoverflow.com/questions/17957076#60053224
ZygD
7

Добавление pauseв Windows 7 до конца не сработало,
но добавление cmd /kперед моей командой сработало.

Пример :

cmd /k gradlew cleanEclipse
Робин
источник
7

Когда файл .bat запускается не из командной строки (например, двойной щелчок).

echo The echoed text
@pause

at_pause

echo The echoed text
pause

Пауза

echo The echoed text
cmd /k

CMD K

echo The echoed text & pause

and_pause

ZygD
источник
3

start cmd /kсделал магию для меня. Я фактически использовал его для подготовки приложения Cordova PhoneGap, он запускает команду, показывает результат и ждет, пока пользователь не закроет его. Ниже приведен простой пример

start cmd /k echo Hello, World!

Что я использовал в моем случае

start cmd /k cordova prepare

Обновить

Вы могли бы даже иметь название для этого, используя

start "My Title" echo Hello, World!

jafarbtech
источник
1

Если вы запускаете скрипт в командной строке, добавьте, exit /bчтобы сохранить CMD открытым

Хулито Санчис
источник
Практически не решает вопрос, так как изменение ipconfigи другие встроенные командные файлы - очень плохая идея .
robinCTS
1

В Windows добавьте «& Pause» в конец вашей команды в файле.

samadadi
источник
1

Я также был озадачен тем, почему мы добавляем a cmdв начале, и мне было интересно, нужно ли мне сначала открывать командную строку. Что вам нужно сделать, это ввести полную команду вместе с cmd /k. Например, предположим, что имя вашего пакетного файла - «my_command.bat», который запускает команду, javac my_code.javaтогда код в вашем пакетном файле должен быть:

cmd /k javac my_code.java

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

RustyCake
источник
0
javac -d C:\xxx\lib\ -classpath C:\xxx\lib\ *.java

cmd cd C:\xxx\yourbat.bat

вторая команда делает ваше окно cmd не закрытым. Важно то, что вы все еще можете ввести новую команду

Huanfasdawq Huanfasd
источник
0

В качестве идентификатора это также работает при запуске команды непосредственно из панели поиска в Windows.

Например, прямой запуск ipconfigзакроет окно cmd сразу после выхода из команды.

введите описание изображения здесь

Использование cmd \k <command>не будет - что я и пытался сделать, когда нашел этот ответ.

введите описание изображения здесь

У него есть дополнительное преимущество - всегда распознавать команду, которую вы пытаетесь запустить. Например, запуск echo hello worldс панели поиска не будет работать, потому что это не команда, однако cmd \k echo hello worldработает просто отлично.

sommmen
источник