Is there a way in a batch script to keep the console open only if invoked from Windows Manager?

ykaganovich picture ykaganovich · Feb 4, 2009 · Viewed 18.6k times · Source

I have a DOS batch script that invokes a java application which interacts with the user through the console UI. For the sake of argument, let's call it runapp.bat and its contents be

java com.example.myApp

If the batch script is invoked in a console, everything works fine. However, if the script is invoked from the Window Manager, the newly opened console closes as soon as the application finishes executing. What I want is for the console to stay open in all cases.

I know of the following tricks:

  • add a pause command at the end of the script. This is a bit ugly in case runapp.bat is invoked from the command line.

  • create a new shell using cmd /K java com.example.myApp This is the best solution I found so far, but leaves an extra shell environment when invoked from the command line, so that calling exit doesn't actually close the shell.

Is there a better way?

Answer

Patrick Cuff picture Patrick Cuff · Feb 4, 2009

See this question: Detecting how a batch file was executed

This script will not pause if run from the command console, but will if double-clicked in Explorer:

@echo off
setlocal enableextensions

set SCRIPT=%0
set DQUOTE="

:: Detect how script was launched
@echo %SCRIPT:~0,1% | findstr /l %DQUOTE% > NUL
if %ERRORLEVEL% EQU 0 set PAUSE_ON_CLOSE=1

:: Run your app
java com.example.myApp

:EXIT
if defined PAUSE_ON_CLOSE pause