Я только что провел быстрый тест и заметил следующее, которое может вам помочь:
- При запуске из командной строки open переменная% 0 не имеет двойных кавычек по пути. Если скрипт находится в текущем каталоге, путь даже не указан, только имя пакетного файла.
- При запуске из проводника переменная% 0 всегда заключена в двойные кавычки и содержит полный путь к пакетному файлу.
Этот сценарий не будет останавливаться при запуске из командной консоли, но будет выполняться при двойном щелчке в проводнике:
@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:
Было также странное поведение при запуске из Проводника, которое я не могу объяснить. Первоначально, а не
@echo %SCRIPT:~0,1% | findstr /l %DQUOTE% > NUL
if %ERRORLEVEL% EQU 0 set PAUSE_ON_CLOSE=1
Я пытался использовать только if
:
if %SCRIPT:0,1% == ^" set PAUSE_ON_CLOSE=1
Это будет работать при запуске из открытой командной строки, но при запуске из Проводника он будет жаловаться, что оператор if
был неправильным.