
Я создал пакетный скрипт, который предполагает, %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. Все права защищены.