Как «приостановить» только при выполнении в новом окне?

Как «приостановить» только при выполнении в новом окне?

Я создал пакетный скрипт, который предполагает, %1что это путь к файлу. Иногда мне хотелось бы использовать этот пакетный скрипт через перетаскивание в проводнике Windows (перетаскивая целевой файл на файл пакетного скрипта), а иногда мне хотелось бы запустить этот пакетный скрипт из существующего окна командной строки и %1явно указать свой путь (обычно просто относительный путь).

Я не хочу, чтобы мой скрипт исчезал немедленно при "перетаскивании", поэтому мне нужно pause. Однако я не хочу нажимать any key to continueкаждый раз при использовании существующего окна командной строки, поэтому я не хочу pause.

Есть ли способ получить лучшее из обоих миров? Могу ли я как-то обнаружить/вывести сценарий, в котором я нахожусь, и решить, делать паузу или нет? Какой подход здесь наилучший?

решение1

Попробуйте использовать это в вашем пакетном файле:

set arg0=%0
if [%arg0:~2,1%]==[:] pause

Это проверяет, является ли третий символ нулевого аргумента (по сути, само имя пакетного файла) двоеточием или нет.

Обычно, когда вы перетаскиваете что-либо в пакетный файл, он вызывается как: "Drive:\path\to\Batch File.bat" Arg1 Arg2 ...Однако, когда мы запускаем пакетный файл из командной строки, мы обычно не склонны вызывать его так, с абсолютным путем в кавычках. Таким образом, мы можем использовать это различие и выполнить pauseтолько тогда, когда двоеточие существует как третий символ, подразумевая, что пакетный файл был запущен с помощью перетаскивания. Конечно, если вы используете абсолютный путь в кавычках для запуска пакетного файла из командной строки, это, естественно, будет pauseтак же.

решение2

Добавьте a cmd /kв конец вашего скрипта. В существующем окне он просто вернётся в командную строку, а в новом окне он сделает то же самое, оставив окно открытым.

@echo off
echo "some text"
cmd /k

Обратите внимание, что /k останавливает печать:

Microsoft Windows [Версия 6.1.7601] Авторские права (c) 2009 Microsoft Corporation. Все права защищены.

Связанный контент