Я надеялся, что ответ @Anders будет работать в его собственном .bat-файле. К сожалению, это не для меня. Судя по комментарию @ DarinH, возможно, так оно и есть для некоторых. Сценарий ниже должен работать для всех, но требует дополнительного параметра.
Ключ лежит в переменной окружения % CmdCmdLine% , которая, я думаю, может быть несколько иной для некоторых крайних случаев.
PauseIfGui.bat
@echo off
if "%~1" == "" ((echo.%CmdCmdLine%)|"%WinDir%\System32\find.exe" /I "%~0")>nul && pause & exit /b
((echo.%CmdCmdLine%)|"%WinDir%\System32\find.exe" /I "%~1")>nul && pause
Это принимает один необязательный параметр: полный путь вызова скрипта. Если параметры не переданы, он запускается так же, как сценарий @Anders.
AnyOtherFile.bat
@echo off
call PauseIfGui.bat %~f0
При открытии из Проводника (т. Е. Двойного щелчка) AnyOtherFile.bat приостанавливается. Если вызывается из командной строки, он не будет.