Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detecting how a batch file was executed

Assuming Windows, is there a way I can detect from within a batch file if it was launched from an open command prompt or by double-clicking? I'd like to add a pause to the end of the batch process if and only if it was double clicked, so that the window doesn't just disappear along with any useful output it may have produced.

Any clever ways to do this? I'm looking for solutions I could rely on to work on a machine that was configured more or less with default settings.

like image 675
Dan Olson Avatar asked Dec 18 '08 09:12

Dan Olson


1 Answers

I just ran a quick test and noticed the following, which may help you:

  • When run from an open command prompt, the %0 variable does not have double quotes around the path. If the script resides in the current directory, the path isn't even given, just the batch file name.
  • When run from explorer, the %0 variable is always enclosed in double quotes and includes the full path to the batch file.

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="

@echo do something...

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

:EXIT
if defined PAUSE_ON_CLOSE pause

EDIT: There was also some weird behavior when running from Explorer that I can't explain. Originally, rather than

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

I tried using just an if:

if %SCRIPT:0,1% == ^" set PAUSE_ON_CLOSE=1

This would work when running from an open command prompt, but when run from Explorer it would complain that the if statement wasn't correct.

like image 59
Patrick Cuff Avatar answered Nov 03 '22 01:11

Patrick Cuff