Для некоторых пакетных файлов полезно различать, был ли файл запущен из командной строки или двойным щелчком из проводника (или его аналога). Например, при запуске пакетника, выполняющего функции мейк-файла, из проводника результаты сборки хочется оставить на экране — то есть поставить в конце вызов команды pause
. Но если запускать его из консоли, то «пауза» будет совершенно лишней.
Можно заметить, что при вызове из проводника (или, например, из менеджера Total Commander) переменная %0
содержит полный путь к пакетному файлу, заключённый в кавычки. Если же пакетник вызывается из консоли, то, скорее всего, при вызове было указано имя файла (с расширением или без).
Справка по команде call
подсказывает нам, что имя вызванного пакетного файла можно получить при помощи выражения %~n0
, а имя с расширением — при помощи %~nx0
. Сравнив эти выражения с исходным значением %0
, можно принять решение о вызове «паузы».
То есть пакетный файл можно закончить следующим фрагментом:
if .%0. == .%~n0. goto END if .%0. == .%~nx0. goto END pause :END
P. S. Если есть вероятность, что пакетник будет запускаться не только из его собственного каталога, т. е. командами вида dir\script
, то можно зайти с другой стороны и сравнивать значение %0
с полным путём: %~f0
.
← | Ремонт и евроремонт: о разнице ментальностей | Опыт дружественных держав | → |