Is there a way for a batch file (in this case, running on Windows XP) to determine whether it was launched from a command line (i.e. inside a console window) or launched via the shell (e.g. by double-clicking)?
I have a script which I’d like to have pause at certain points when run via the shell, but not when run at a command line. I’ve seen a similar question on SO, but am unable to use the same solution for two reasons: first, whether or not it pauses needs to be dependent on multiple factors, only one of which is whether it was double-clicked. Second, I’ll be distributing this script to others on my team and I can’t realistically ask all of them to make registry changes which will affect all scripts.
Is this possible?
Found one 🙂 – After desperately thinking of what
cmdmight do when run interactively but not when launching a batch file directly … I finally found one.The pseudo-variable
%cmdcmdline%contains the command line that was used to launchcmd. In casecmdwas started normally this contains something akin to the following:However, when launching a batch file it looks like this:
Small demo:
This way of checking might not be the most robust, though, but
/cshould only be present as an argument if a batch file was launched directly.Tested here on Windows 7 x64. It may or may not work, break, do something weird, eat children (might be a good thing) or bite you in the nose.