Какую команду можно поставить в конце командного файла, чтобы предотвратить автоматическое закрытие консоли после выполнения файла?
ОТВЕТЫ
Ответ 1
В пакетных файлах Windows/DOS:
pause
Это печатает приятное сообщение «Press any key to continue . . . «
Или, если вы не хотите сообщение «Press any key to continue . . .» , сделайте это вместо этого:
pause >nul
Ответ 2
Зависит от точного вопроса!
Обычно pause выполняет задание в файле .bat.
Если вы хотите, чтобы cmd.exe не закрывался, чтобы продолжать печатать, используйте команду cmd /k в конце файла.
Ответ 3
Если вы хотите, чтобы cmd.exe не закрывался и мог продолжать печатать, используйте cmd /k
Просто почувствовал необходимость уточнить, что делает /k (с сайта Windows):
/k : Выполняет команду, указанную в строке, и продолжает.
Итак, cmd /k без последующей команды в конце файла bat просто сохранит окно cmd.exe для дальнейшего использования.
Выскакивает командная строка CMD Как убрать
С другой стороны, pause в конце командного файла просто приостанавливает процесс и завершает cmd.exe при первой кнопке, нажав
Ответ 4
Ниже приведен список команд в командном файле, который откроет новые окна командной строки, а новые окна не будут автоматически выходить.
start «title» call abcd.exe param1 param2 start «title» call xyz.exe param1 param2
Ответ 5
Если вы используете Maven и хотите пропустить ввод и не допустить закрытия консоли, чтобы увидеть результат, вам нужно использовать команду CALL в скрипте, кроме просто «mvn clean install».
Как это закроет консоль
ECHO This is the wrong exemple mvn clean install pause
Так консоль будет оставаться открытой
ECHO This is the right exemple CALL mvn clean install pause
Если вы не используете команду CALL , ни один из примеров вставки не будет работать.
Ответ 6
Добавьте cmd.exe в новую строку под кодом, который вы хотите выполнить:
c:Python27python D:codesimple_http_server.py cmd.exe
Ответ 7
мой способ — написать фактическую партию (говоря «foo.bat» ), чтобы закончить работу; затем создайте еще один «start.bat»:
Я считаю, что это очень полезно, когда я устанавливаю одноразовые переменные среды.
Ответ 8
Вызвать cmd в конце командного файла.
Ответ 9
set /p=
. Он будет ожидать ввода пользователем и высвободит поток при нажатии клавиши.
runas /user:# «» >nul 2>nul GOTO programend
Таким образом, пользователь не может выйти, используя ввод.
Ответ 12
Этот маленький хак просит пользователя ввести ключ и сохраняет его в переменной% exitkey% (эта переменная может быть вызвана тем, что вам нравится, хотя).
set /p exitkey= «Press any key to continue. »
NB: пространство после ‘=’ очень важно
Ответ 13
pause
echo text to display pause>nul
Ответ 14
У меня были проблемы с ответами здесь, поэтому я придумал это, что работает для меня (TM):
Командная строка закрывается после выполнения команды (Решение)
cmd /c node_modules.bintsc cmd /c node rollup_build.js pause
Ответ 15
Есть два способа сделать это зависит от варианта использования
1) Если вы хотите, чтобы приглашение Windows cmd оставалось открытым, чтобы вы могли увидеть результат выполнения и закрыть его впоследствии; использовать
2), если вы хотите, чтобы приглашение Windows cmd оставалось открытым и позволяло выполнять некоторые последующие команды; использовать
Ответ 16
Легко, добавьте cmd в свою последнюю строку летучей мыши, НО! если вы reset или очистите свой системный путь, вы должны запустить свой cmd с полным путем, например:
%windir%system32cmd.exe
Например, у меня есть файл bat для reset jdk для старой версии, например:
PATH=C:Program FilesJavajdk1.6.0_45bin;C:apache-ant-1.7.1bin SET JAVA_HOME=C:Program FilesJavajdk1.6.0_45 %windir%system32cmd.exe
так как я reset системный путь, я должен запустить cmd с полным путем или система не сможет найти cmd.exe, он не сможет запустить cmd и просто закроет окно, t см. сообщение об ошибке.
Ответ 17
pause
press any key to continue.
и окно закроется после нажатия клавиши. Чтобы скрыть текст, напечатанный в командной строке, введите
pause>nul
Источник: utyatnishna.ru
cmd закрывается сразу после запуска
Кто-нибудь нашел такое поведение, когда Command Processor (cmd.exe) закрывается сразу после его вызова? Ive запускает McAfee AV и проверку системного файла Windows (sfc.exe), и ничего плохого не было обнаружено, Ive даже скопировал файл cmd.exe с другого компьютера Win 7, и он все еще работает одинаково. Самое странное — на окнах 7 64 есть также 32-битная версия этого файла, которая работает совершенно нормально.
SysInternals Process Monitor показывает, что процесс cmd.exe заканчивается кодом выхода 0x0. o_O
Также вызывающие команды непосредственно из меню пуска, например ping, работают нормально.
Возможно, этот вопрос не имеет строгого отношения к кодированию, но эта проблема мешает мне делать много вещей, связанных с фактической разработкой приложений и проверкой среды.
Отвечая на все вопросы:
- суперпользователь, безопасный режим, запуск в качестве администратора, изменение права собственности и разрешений — не помогло
- Я вызывал при запуске меню, а также d-click cmd.exe с тем же результатом,
- Нет вирусов или вредоносных программ, обнаруженных на сегодняшний день при сканировании с помощью McAfee, Anti-malware, MS Malicious удаление. и т.д.
Наконец, я получил разрешение SOLVED :
Перейдите к HKLMSoftwareMicrosoftCommand Processor или HKEY_CURRENT_USERSoftwareMicrosoftCommand Processor или HKEY_LOCAL_MACHINESoftwareMicrosoftCommand Processor
По какой-то причине внутри был ключ AUTORUN с «EXIT».
В некоторых случаях приглашение командной строки также открывается при запуске, то есть при применении вышеприведенного решения зависает система в командной строке при входе в систему.
Это можно исправить с помощью Autoruns, где вам нужно отключить реестры запуска командной строки на вкладке «Вход в систему». (может быть несколько записей)
Это также объясняет, почему код выхода был 0x0.
Не знаю, что это за штука. McAfee показал активность в течение недели, и я заметил ее в прошлую пятницу.
Надеюсь на эти симптомы, и мой ответ поможет кому-то в будущем
У меня была эта проблема, и я нашел что-то, чтобы попытаться решить мою проблему.
Исследуйте запись реестра HKLMSoftwareMicrosoftCommand Processor Если есть клавиша «Автозапуск», этот ключ заставляет запись командного файла в этом ключе запускаться в начале выполнения командной строки. Вы можете попробовать пропустить это выполнение, чтобы протестировать решение, используя RUN cmd.exe/d
Если проблема специфична для пользователя, проверьте HKCUSoftwareMicrosoftCommand Prompt для этого ключа. Текущая запись пользователя смешивается с локальной машинной записью, поэтому, если ключ существует в текущем реестре пользователей, он попытается выполнить указанный пакетный файл. На моем компьютере ключ был там, но пустой.
Если в этом ключе есть командный файл, то выясните, что делает этот пакетный файл, и если вы хотите его там. Я удалил ключ вместе, и проблема исчезла. На моем компьютере ключ присутствовал у текущего пользователя, но не на локальном компьютере.
Как-то какой-то вирус, вероятно, поместил этот ключ в registyr, но поскольку он является допустимым ключом, для детекторов вредоносных программ трудно найти это.
Я не нашел другого решения этой проблемы в Интернете, поэтому, пожалуйста, сообщите другим, если это сработает для вас. Я никогда не выходил на форумы, но видел кучу вопросов об этом и о хороших решениях, поэтому я думал, что должен опубликовать.
Моя проблема в том, что в Windows есть окна командной строки, которые закрываются сразу после выполнения. Чтобы решить эту проблему, я хочу, чтобы поведение по умолчанию состояло в том, что окно остается открытым. Обычно этого поведения можно избежать с помощью трех методов, которые мне приходят в голову:
- Помещение строки pause после пакетных программ, чтобы побудить пользователя нажать клавишу до выхода
- Запуск этих командных файлов или других инструментов управления командной строкой (даже запуск службы, перезапуск и т. д. с net start xy или что-то подобное) в пределах cmd.exe (Start — Run — cmd.exe)
- Запуск этих программ с cmd /k следующим образом: cmd /k myprogram.bat
Но есть и другие случаи, в которых пользователь:
- Запускает программу в первый раз и не знает, что данная программа будет запущена в командной строке (Windows Command Processor), например. при запуске ярлыка из меню «Пуск» (или из другого места), OR
- Найти немного неудобно для запуска cmd.exe все время и не имеет времени / возможности переписать код этих команд всюду, чтобы поставить паузу после них или избежать выхода в явном виде.
(Элементы автозапуска _String values_ . )
Я помещаю cmd /d /k в качестве значения, чтобы попробовать, но это вообще не изменило поведение упомянутых выше вещей . Это просто изменило поведение окна командной строки при ее открытии явно (Start-Run-cmd.exe).
Итак, как это работает? Можете ли вы дать мне какие-либо идеи для решения этой проблемы?
Если Вы заметили, что командная строка часто автоматически закрывается, то полезно будет прочитать эту статью. Мы расскажем, как это предотвратить.
Предотвратить автоматическое закрытие командной строки
Нажмите клавиши Windows + R, чтобы запустить команду Выполнить.
Запустите командную строку, набрав .
Затем добавьте / K. После можете закрыть окно вручную.
Изображение: Emile Perron — Unsplash.com
Несколько слов благодарности всегда очень кстати.
Похожие запросы
- закрывается командная строка
- почему командная строка сразу закрывается — Лучшие ответы
- командная строка закрывается — Лучшие ответы
- как узнать ip адрес через командную строку — Полезные советы — Интернет
- как запустить компьютер через командную строку — Полезные советы — Windows
- как удалить файл через командную строку — Полезные советы — Windows
- Как открыть Internet Explorer в Windows 10 — Полезные советы — Операционные системы
- как сделать загрузочную флешку командная строка — Полезные советы — Windows
Оригинальная статья опубликована пользователем jak58 . Переведено пользователем Айдан Мамедова. Последнее обновление 03.09.2019, 10:39 от пользователя Макс Вега.
Источник: softlast.ru
Почему окно консоли закрывается сразу после отображения моего вывода?
Теперь я просто попробовал Пример 1 (здесь — ссылка на MSDN ), и я столкнулся с проблемой: почему окно консоли сразу же закрывается после отображения моего вывода?
using System; public class Hello1 < public static int Main() < Console.WriteLine(«Hello, World!»); return 0; >>
user962206 15 Янв 2012 в 12:06
Вы можете попробовать открыть с помощью консоли. Перетащите его на консоль и нажмите «Enter». Я предполагаю, что это EXE-файл.
Sajidur Rahman
25 Янв 2018 в 22:16
Если вы пытаетесь ОТЛАДИТЬ программу командной строки, которая запускается внешним процессом, см. Этот вопрос: stackoverflow.com/a/23334014/ 3195477
StayOnTarget
26 Ноя 2018 в 19:54
22 ответа
Лучший ответ
проблема в том, что их программа Hello World отображается, а затем немедленно закрывается.
это почему?
Потому что это завершено. Когда консольные приложения завершили выполнение и вернулись из своего метода main , соответствующее окно консоли автоматически закрывается. Это ожидаемое поведение.
Если вы хотите оставить его открытым для целей отладки, вам нужно указать компьютеру дождаться нажатия клавиши перед завершением работы приложения и закрытием окна.
Метод Console.ReadLine — это один из способов делая это. Добавление этой строки в конец вашего кода (непосредственно перед оператором return ) заставит приложение ждать, пока вы нажмете клавишу, перед выходом.
В качестве альтернативы вы можете запустить приложение без подключенного отладчика, нажав Ctrl + F5 из среды Visual Studio, но это имеет очевидный недостаток, который не позволяет вам использовать отладку. функции, которые вы, вероятно, захотите использовать при написании приложения.
Лучшим компромиссом, вероятно, является вызов метода Console.ReadLine только при отладке приложения путем включения его в директиву препроцессора. Что-то типа:
#if DEBUG Console.WriteLine(«Press enter to close. «); Console.ReadLine(); #endif
Вы также можете захотеть, чтобы окно оставалось открытым в случае возникновения неперехваченного исключения. Для этого вы можете поместить Console.ReadLine(); в блок finally :
#if DEBUG try < //. >finally < Console.WriteLine(«Press enter to close. «); Console.ReadLine(); >#endif
selalerer 9 Июл 2018 в 10:54
В качестве альтернативы вы можете использовать Console.ReadKey ();
PlantationGator
27 Мар 2013 в 01:36
Лично я предпочитаю if (System.Diagnostics.Debugger.IsAttached) Console.ReadLine(); .
Sameer Singh
21 Ноя 2013 в 12:28
Почему работа без отладки меняет это поведение?
Вы могли подумать, что это должно быть более точным опытом, а не менее.
Kyle Delaney
5 Сен 2017 в 03:31
Еще одна строка ненужного кода компилируется в ваш двоичный файл. На самом деле я предпочитаю препроцессорный подход.
15 Авг 2019 в 21:50
Почему нам вообще это нужно в наши дни?
5 Июн 2020 в 12:01
В проектах Visual Studio 2019 для .NET Core консоль по умолчанию не закрывается автоматически. Вы можете настроить поведение через меню Инструменты → Параметры → Отладка → Общие → Автоматически закрывать консоль при остановке отладки. Если окно консоли автоматически закрывается, проверьте, не установлен ли указанный параметр.
То же самое относится и к проектам консоли нового стиля .NET Framework:
Exe net472
Проект .NET Framework старого стиля по-прежнему безоговорочно закрывает консоль в конце (начиная с Visual Studio 16.0.1).
Peter Mortensen 18 Янв 2022 в 02:42
Эта опция доступна для меня в VS2017 15.9.4, но она не работает для моего консольного приложения .net core 2.1 .
31 Июл 2019 в 16:47
31 Июл 2019 в 22:53
Нет. Пробовал использовать консольное приложение .NET framework, но все равно не работает. (Я установил VS2019 на другой компьютер, и он работает. Возможно, это ошибка в VS17 15.9.4)
1 Авг 2019 в 15:33
В 2019 году он работает даже для проектов WPF: pastebin.com/FpAeV0cW. Но вам необходимо установить .NET Core 3.
1 Окт 2019 в 13:00
Я всегда добавляю следующий оператор в консольное приложение. (Создайте для этого фрагмент кода, если хотите)
Console.WriteLine(«Press any key to quit!»); Console.ReadKey();
Это помогает, когда вы хотите поэкспериментировать с разными концепциями через консольное приложение.
Ctrl + F5 заставит консоль остаться, но вы не сможете отлаживать! Все консольные приложения, которые я написал в реальном мире, всегда не интерактивны и запускаются планировщиком, таким как TWS или CA Workstation, и не требуют чего-то подобного.
Rashwan L 27 Дек 2015 в 12:08
Чтобы упростить то, что говорят другие: Используйте Console.ReadKey(); .
Это делает так, что программа ждет, когда пользователь нажмет обычную клавишу на клавиатуре.
Источник: использую в своих программах для консольных приложений.
Wai Ha Lee 27 Дек 2015 в 12:24
Вы можете решить это очень простым способом, просто вызвав ввод. Однако, если вы нажмете Enter , консоль снова отключится. Просто используйте это Console.ReadLine(); или Console.Read();
gdmanandamohon 24 Ноя 2017 в 10:25
Добавьте следующее перед возвращением 0:
system(«PAUSE»);
Это печатает строку для нажатия клавиши, чтобы закрыть окно. Окно будет отображаться до тех пор, пока вы не нажмете клавишу ввода. Я прошу своих студентов добавить его во все свои программы.
Theresa 23 Сен 2013 в 05:29
Gonçalo Garrido
27 Июн 2019 в 14:44
Если ваша программа требует, чтобы вы нажали Enter, чтобы продолжить, как если бы вам нужно было ввести значение и продолжить, добавьте новый тип double или int и введите write перед retunr (0); scanf_s («% lf»,
Watifido 26 Янв 2015 в 03:33
Это вопрос C # .
Wai Ha Lee
27 Дек 2015 в 12:23
По моему мнению, если мы хотим стабилизировать ВЫВОД КОНСОЛЬНОГО ПРИЛОЖЕНИЯ до закрытия вывода, отобразите USE, метку: после MainMethod и метку goto; до окончания программы
static void Main(string[] args) < label: // Snippet of code goto label; >
Community 9 Дек 2018 в 05:21
Это просто заставит программу плакатов продолжать печатать «Hello, World!» много раз
DavidPostill
23 Июл 2014 в 15:19
Господи Иисусе, не знал, что оператор goto даже разрешен в C #.
3 Окт 2019 в 10:33
Вместо того, чтобы использовать
Console.Readline() Console.Read() Console.ReadKey()
Вы можете запустить свою программу, используя Ctrl + F5 (если вы находитесь в Visual Studio). Тогда Visual Studio будет держать окно консоли открытым, пока вы не нажмете клавишу.
Примечание. При таком подходе вы не можете отлаживать свой код.
Bhavik Patel 4 Сен 2015 в 05:04
Привет, пользователь. Я новый пользователь VS и C # в целом. Что делает Ctrl + F5 иначе, чем просто красивый Start ?
theGreenCabbage
26 Ноя 2013 в 21:36
К сожалению, иногда перестает работать как положено.
19 Дек 2013 в 17:14
Причина проблемы в том, что окна автоматически закрывают окно терминала при остановке программы. Другие системы будут держать окно открытым автоматически. Это гораздо лучший способ запустить программу. Не используйте для этого ReadKey, Read или ReadLine, поскольку это предотвращает использование вашей программы в сочетании с другими консольными приложениями и конвейерами.
23 Июл 2014 в 18:33
Я предполагаю, что причина, по которой вы не хотите, чтобы он закрывался в режиме отладки, заключается в том, что вы хотите посмотреть значения переменных и т. Д. Так что, вероятно, лучше просто вставить точку останова на закрытии «>» основной функции . Если вам не нужно отлаживать, тогда Ctrl-F5 — лучший вариант.
Rob L 18 Фев 2016 в 01:33
Удивлен, что ни один из других ответов не подтвердил этого. Редко, когда ответ с новой опцией добавляется так поздно после создания вопроса.
Scott Chamberlain
18 Фев 2016 в 01:37
То же самое для Ctrl F5 или F5 . Поместите непосредственно перед концом метода Main .
using System.Diagnostics; private static void Main(string[] args) < DoWork(); if (Debugger.IsAttached) < Console.WriteLine(«Press any key to continue . . .»); Console.ReadKey(); >>
Daniel 25 Ноя 2020 в 10:35
Программа немедленно закрывается, потому что ничто не мешает ей закрыться. Вставьте точку останова в return 0; или добавьте Console.Read(); перед return 0; , чтобы программа не закрывалась.
Robert Rouhani 15 Янв 2012 в 12:10
Если вы хотите, чтобы ваше приложение оставалось открытым, вам нужно что-то сделать, чтобы поддерживать его процесс. Приведенный ниже пример — самый простой, который можно поместить в конец вашей программы:
while (true) ;
Однако это вызовет перегрузку процессора, так как он вынужден бесконечно повторяться.
На этом этапе вы можете выбрать использование класса System.Windows.Forms.Application (но для этого потребуется добавить ссылку System.Windows.Forms ):
Application.Run();
Это не приводит к утечке ЦП и успешно работает.
Чтобы избежать добавления ссылки System.Windows.Forms , вы можете использовать простой трюк, так называемое ожидание вращения , импортировав System.Threading :
SpinWait.SpinUntil(() => false);
Это также отлично работает и в основном состоит из цикла while с отрицательным условием, которое возвращается указанным выше лямбда-методом. Почему это не перегружает процессор? Вы можете посмотреть исходный код здесь; в любом случае, он в основном ожидает некоторого цикла ЦП перед повторением.
Вы также можете создать петлитель сообщений, который просматривает ожидающие сообщения из системы и обрабатывает каждое из них перед переходом к следующей итерации, как показано ниже:
[DebuggerHidden, DebuggerStepperBoundary, DebuggerNonUserCode, DllImport(«user32.dll», EntryPoint = «PeekMessage»)] public static extern int PeekMessage(out NativeMessage lpMsg, IntPtr hWnd, int wMsgFilterMin, int wMsgFilterMax, int wRemoveMsg); [DebuggerHidden, DebuggerStepperBoundary, DebuggerNonUserCode, DllImport(«user32.dll», EntryPoint = «GetMessage»)] public static extern int GetMessage(out NativeMessage lpMsg, IntPtr hWnd, int wMsgFilterMin, int wMsgFilterMax); [DebuggerHidden, DebuggerStepperBoundary, DebuggerNonUserCode, DllImport(«user32.dll», EntryPoint = «TranslateMessage»)] public static extern int TranslateMessage(ref NativeMessage lpMsg); [DebuggerHidden, DebuggerStepperBoundary, DebuggerNonUserCode, DllImport(«user32.dll», EntryPoint = «DispatchMessage»)] public static extern int DispatchMessage(ref NativeMessage lpMsg); [DebuggerHidden, DebuggerStepperBoundary, DebuggerNonUserCode] public static bool ProcessMessageOnce() < NativeMessage message = new NativeMessage(); if (!IsMessagePending(out message)) return true; if (GetMessage(out message, IntPtr.Zero, 0, 0) == -1) return true; Message frameworkMessage = new Message() < HWnd = message.handle, LParam = message.lParam, WParam = message.wParam, Msg = (int)message.msg >; if (Application.FilterMessage(ref frameworkMessage)) return true; TranslateMessage(ref message); DispatchMessage(ref message); return false; >
Затем вы можете безопасно выполнить цикл, выполнив что-то вроде этого:
while (true) ProcessMessageOnce();
Davide Cannizzo 13 Янв 2020 в 17:48
В качестве альтернативы вы можете отложить закрытие, используя следующий код:
System.Threading.Thread.Sleep(1000);
Обратите внимание, что Sleep использует миллисекунды.
gotqn 7 Дек 2014 в 15:40
Другой способ — использовать Debugger.Break() перед возвратом из метода Main
dimaaan 8 Сен 2015 в 10:39
Хотя это переключает фокус обратно на окно отладчика и потенциально скрывает содержимое окна консоли.
Stephen Turner
26 Окт 2017 в 13:26
Код готов, чтобы продолжить, вам нужно добавить это:
Console.ReadLine();
Console.Read();
Источник: question-it.com