Почему cmd не завершит выполнение командного файла?

Почему cmd не завершит выполнение командного файла?

Я пытался:

"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar 

а также

 @echo off "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar exit 

Если приложение Java не заканчивается (например, вы используете командный файл для запуска приложения Java), используйте команду запуска для его запуска:

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

Это запустит приложение java и продолжит выполнение командного файла, не дожидаясь завершения Java-приложения.

Объяснение:

Вот как это работает; Командный файл обрабатывается по одной строке за раз. Каждая команда выполняется по очереди, и пакетный процессор ждет завершения одной команды до начала следующего. Проблема, с которой вы столкнулись, заключается в том, что запущенное приложение Java (Jilko.jar) – это оконная программа, которая продолжает работать даже после строки, запускающей ее. Если это инструмент, который выполняет какое-то действие, а затем завершается, командный файл будет продолжать следующую команду (или выйти, если их больше нет). Поскольку программа все еще работает, пакетный процессор ждет, пока окно не будет закрыто, прежде чем двигаться дальше. Вы можете увидеть это в действии, выходя из программы Java: окно консоли с командным файлом затем закрывается.

Решение:

Что вам нужно сделать, чтобы исправить это, – поручить пакетному процессору запустить программу и продолжить работу, не ожидая ее:

 start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar 

Как упоминал Терренс , "" – это заголовок, который будет использоваться для окна консоли. Однако это необязательно, если команда не указана в кавычках; В противном случае требуется . Вы можете поместить что-то там, если хотите, или оставить его пустым, но если команда находится в кавычках, она должна присутствовать, иначе командный интерпретатор будет обрабатывать указанную команду как заголовок и открывать консоль, которая просто сидит там, ожидая кое-что сделать.

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

 start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar 

Команда start – это встроенная команда, которая запускает процесс (в основном, как запуск программы из меню «Пуск»). Итак, что происходит в этом контексте, так это то, что пакетный процессор запускает команду start которая, в свою очередь, запускает указанную программу и завершает (сама, а не порожденная программа). Таким образом, пакетный процессор продолжает работать, как ожидалось. В нем также есть некоторые параметры, которые могут быть полезны, например, запуск программы с минимальной ( /min ) или максимизированной ( /max ), запуск ее с низким приоритетом ( /low ) и т. Д. См. start /? Для деталей.

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

Программа START исправляет это, но старая проблема с START по-прежнему существует. Вы не можете просто использовать:

 START "c:\my dir\myfile.exe" 

Первым параметром START по-прежнему является имя окна. Если вы опустите это, вы просто открываете консоль консоли CMD с окном, названным тем, что вы пытались запустить. В приведенном выше экземпляре у меня теперь есть консольное окно с названием окна « c: \ my dir \ myfile.exe ». Не то, что я хотел!

Чтобы опустить имя окна, просто используйте пару двойных кавычек для определения пустой строки, например:

 START "" "c:\my dir\myfile.exe" 

Наконец, завершите свой командный файл командой EXIT, чтобы он закрылся.

Этот метод работает последовательно в Windows 7 и 8.

Для устранения неполадок я нахожу, что добавление ECHO из того, что я собираюсь сделать, тогда TIMEOUT того, что я только что сделал, помогает много. Например:

 ECHO I'm about to launch the program... START "" "c:\my dir\myfile.exe" TIMEOUT 5 

Поскольку Timeout дает вам обратный отсчет, вам не нужно ECHO, что вы собираетесь задерживать.

Также – всегда используйте EXIT под Windows 7, так как только доведение до конца командного файла не обязательно завершает его – как в предыдущих версиях Windows. Windows 7 может быть более чувствительной к этой версии более ранних версий NT (например, Windows 2000 Professional). Это было упомянуто в некоторых, но не во всех предыдущих ответах.

Детали личного опыта для поддержки ответа:

После переноса установки StarOffice5.2 с Windows 2000 на Windows 7 я получал ошибки в памяти при завершении набора. Это не было видно в Windows 2000.

Несколько лет назад я написал пакетные файлы для автоматической резервной копии и восстановления soffice.ini, чтобы разрешить ремонт, когда он становится поврежденным (достаточно часто, чтобы быть проблемой – пакет не загружается). Однако автоматическое резервное копирование (инициированное ссылкой на пакетный файл, помещенный в Office52 \ user \ config \ startup) происходит только после 5-секундной задержки. Я заметил, что всякий раз, когда я выходил из пакета непосредственно перед запуском командного файла, окончание набора не было ошибкой. Это указывало на проблему в пакетных файлах.

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

Как только приложение будет завершено, оно должно выйти. Вы уверены, что Java-приложение работает правильно?

Я просто справлялся с одной и той же проблемой, и он, наконец, разрешил себя после создания того, что казалось случайным изменением в batchfile. Я не понимаю, почему, но я отправлю его здесь, если это поможет кому-то другому позже.

Я использую служебную программу SysInternals Pskill и утилиту для сна, поскольку XP Home не содержит многого с точки зрения функциональности командной строки.


Это пакетный файл, который фактически закрывается после его завершения:

 @echo off start /min C:\Progra~1\PsTools\pskill.exe explorer.exe start /min C:\Progra~1\PsTools\pskill.exe Powermenu.exe start /min C:\Progra~1\PsTools\pskill.exe PWGen.exe start /min C:\Progra~1\PsTools\pskill.exe redshiftgui.exe start /min C:\Progra~1\PsTools\pskill.exe clipx.exe sleep 2 start explorer.exe sleep 3 start C:\Progra~1\ClipX\clipx.exe sleep 1 start C:\Progra~1\Powermenu\PowerMenu.exe sleep 1 start /min C:\Progra~1\PWGen\PWGen.exe sleep 1 start C:\Progra~1\RedshiftGUI\redshiftgui.exe && exit 

Если бы у меня изменились последние несколько строк, окно cmd оставалось открытым, пока я не щелкнул «X» в углу:

 start C:\Progra~1\RedshiftGUI\redshiftgui.exe sleep 1 start /min C:\Progra~1\PWGen\PWGen.exe && exit 

Даже когда я пытался вызвать pskill, чтобы убить себя, процесс cmd.exe исчезнет из диспетчера задач, и pskill сообщит изнутри его cmd.exe, что процесс cmd.exe был убит, но окно cmd.exe все равно будет Не двигайся, пока я не щелкнул «Х» в углу:

 start C:\Progra~1\RedshiftGUI\redshiftgui.exe sleep 1 start /min C:\Progra~1\PWGen\PWGen.exe sleep 1 C:\Progra~1\PsTools\pskill.exe cmd.exe 

После того, как я добавил && exit в каждую строку, я заметил, что некоторые из них ответили на него и прервали пакетную обработку, а другие – нет.

Поэтому я просто поставил одну из чувствительных в конце, а не как изначально.

Как я уже сказал, я не знаю, почему, но я рад, что все закончилось.

пытаться:

cmd /c "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

Вот как я это сделал:

  1. Создайте пакетный файл со следующим содержимым:

     java -Xms512M -Xmx512M -jar yourFileName.jar -o true EXIT 
  2. В пределах вашего входного потока ввода добавьте:

     System.exit(1); 

По умолчанию Windows 2003 не имеет «учетных записей пользователей» в панели управления. Я написал небольшую партию, чтобы открыть учетные записи пользователей:

 @echo off rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll exit 

Он работал нормально, открылись учетные записи пользователей, но окно CMD также оставалось открытым. После некоторых исследований здесь я добавил: НАЧАТЬ «» до начала строки 2 следующим образом:

 @echo off Start "" rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll o exit 

Открывается окно «Учетные записи пользователей», остается открытым и окно CMD закрывается. Очень просто.

Я искал и искал решение закрыть окно пакетного файла, когда команда EXIT оставляет окно открытым по неизвестной причине. Я, наконец, наткнулся на решение.

Удалите EXIT с конца командного файла и используйте:

 Taskkill /IM conhost.exe /F 

Я создал пакетный файл net use на 32-разрядной машине Windows 7, а cmd командного файла не выйдет после выполнения. Я запускаю один и тот же командный файл на другой 64-разрядной машине Windows 7, и cmd из командного файла обычно выходит.

Я попробовал предложение Брайана, и он не работает на этой 32-разрядной машине Windows 7, потому что не было процесса conhost.exe, поэтому я изменил его следующим образом:

 Taskkill /IM cmd.exe /F 

Командный файл сетевого использования не всегда выходит из строя, и он показывает случайное «Завершение пакетного задания (Y / N)».

Согласно этой теме я изменил пакетный файл следующим образом:

 @echo off if "%~1"=="-FIXED_CTRL_C" ( REM Remove the -FIXED_CTRL_C parameter SHIFT ) ELSE ( REM Run the batch with <NUL and -FIXED_CTRL_C CALL <NUL %0 -FIXED_CTRL_C %* GOTO :EOF ) net use \\Server\folder Taskkill /IM cmd.exe /F 

Сетевой пакетный файл в конечном итоге выходит из строя.

Interesting Posts

Отключить Центр загрузки Microsoft Office

HTTP-обработчик против HTTP-модуля

Как отладить расширение панели chrome devtools?

Как настроить Xen, чтобы разрешить несколько разных диапазонов IP в domU?

Запись в TextBox из другого streamа?

Можно ли создать загрузочный CD Extra (т. Е. 1 аудиодорожку и 1 загрузочную дорожку данных)?

Как установить заголовок «Принять:» в запросе Spring RestTemplate?

Какие причины и каковы различия между NoClassDefFoundError и ClassNotFoundException?

Просмотр текущего дня на панели задач

Entity Framework – включает несколько уровней свойств

Могут ли macros быть перегружены по количеству аргументов?

Не распознан жесткий диск, пароль администратора супервизора

Извлечь строку, соответствующую минимальному значению переменной по группе

Регулярное выражение для разделения на пробелы, если только в кавычках

Шаблоны проектирования: абстрактный завод по сравнению с заводским методом

Давайте будем гением компьютера.