Мне нравится использовать типичную строку «usage:» в моих сценариях cmd.exe
- если параметр отсутствует, пользователю выдается простое напоминание о том, как использовать сценарий.
Проблема в том, что я не могу с уверенностью предсказать, будет ли потенциальный пользователь использовать GUI или CLI. Если кто-то, использующий графический интерфейс, дважды щелкнет этот сценарий в окне проводника, у него не будет возможности ничего прочитать, если я не приостановлю
окно. Если они используют CLI, пауза
их побеспокоит.
Итак, я ищу способ его обнаружить.
@echo off
if _%1_==__ (
echo usage: %nx0: filename
rem now pause or not to pause?
)
Есть ли хорошее решение по этому поводу?
Пожалуйста, используйте findstr
echo %cmdcmdline% | findstr /ic:"%~f0" >nul && ( pause >nul )
или
setlocal EnableDelayedExpansion
.
.
echo !cmdcmdline! | findstr /ic:"%~f0" >nul && ( pause >nul )
.
.
endlocal
Это всегда работает ...
Это только с использованием внутренней команды. так эффективно ....
EnableDelayedExpansion
if "!cmdcmdline!" neq "!cmdcmdline:%~f0=!" pause >nul
или
if not "!cmdcmdline!" == "!cmdcmdline:%~f0=!" pause >nul
DisableDelayedExpansion
if "%cmdcmdline%" neq "%cmdcmdline:%~f0=%" pause >nul
или
if not "%cmdcmdline%" == "%cmdcmdline:%~f0=%" pause >nul
Аналогичный подход ...
setlocal
set startedFromExplorer=
echo %cmdcmdline% | find /i "cmd.exe /c """"%~0""" >nul
if not errorlevel 1 set startedFromExplorer=1
...
if defined startedFromExplorer pause
goto :EOF