Определение того, был ли запущен / выполнен пакетный сценарий из командной строки (cmd) -или- Чтобы приостановить или не приостановить?

Мне нравится использовать типичную строку «usage:» в моих сценариях cmd.exe - если параметр отсутствует, пользователю выдается простое напоминание о том, как использовать сценарий.

Проблема в том, что я не могу с уверенностью предсказать, будет ли потенциальный пользователь использовать GUI или CLI. Если кто-то, использующий графический интерфейс, дважды щелкнет этот сценарий в окне проводника, у него не будет возможности ничего прочитать, если я не приостановлю окно. Если они используют CLI, пауза их побеспокоит.

Итак, я ищу способ его обнаружить.

@echo off
if _%1_==__ (
    echo usage: %nx0: filename
    rem now pause or not to pause?
)

Есть ли хорошее решение по этому поводу?

23
задан Simon Sobisch 3 January 2017 в 10:52
поделиться

3 ответа

Пожалуйста, используйте findstr

echo %cmdcmdline% | findstr /ic:"%~f0" >nul && ( pause >nul )

или

setlocal EnableDelayedExpansion
.
.
echo !cmdcmdline! | findstr /ic:"%~f0" >nul && ( pause >nul )
.
.
endlocal

Это всегда работает ...

0
ответ дан 29 November 2019 в 02:45
поделиться

Это только с использованием внутренней команды. так эффективно ....

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
1
ответ дан 29 November 2019 в 02:45
поделиться

Аналогичный подход ...

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
0
ответ дан 29 November 2019 в 02:45
поделиться