2

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

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

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

2 ответа2

4

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

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

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

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

3

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

@echo off
echo "some text"
cmd /k

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

Microsoft Windows [Версия 6.1.7601] Copyright (c) 2009 Корпорация Microsoft. Все права защищены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .