Como “pausar” somente se estiver executando em uma nova janela?

Como “pausar” somente se estiver executando em uma nova janela?

Eu criei um script em lote que assume %1ser um caminho para um arquivo. Às vezes, gostaria de usar esse script em lote arrastando e soltando no Windows Explorer (arrastando meu arquivo de destino para o arquivo de script em lote) e, outras vezes, gostaria de executar esse script em lote a partir de uma janela de prompt de comando existente e fornecer meu %1path explicitamente (geralmente apenas um caminho relativo).

Não quero que meu script desapareça imediatamente ao "arrastar e soltar", portanto, preciso pause. No entanto, não quero pressionar any key to continuesempre ao usar uma janela de prompt de comando existente, portanto, não quero pause.

Existe uma maneira de ter o melhor dos dois mundos? Posso de alguma forma detectar/inferir o cenário em que estou e decidir fazer uma pausa ou não depois disso? Qual é a melhor abordagem aqui?

Responder1

Tente usar isso em seu arquivo em lote:

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

Isso verifica se o terceiro caractere do 0º argumento (basicamente, o próprio nome do arquivo em lote) é dois pontos ou não.

Normalmente, quando você arrasta e solta algo em um arquivo em lote, ele é chamado assim: "Drive:\path\to\Batch File.bat" Arg1 Arg2 ...No entanto, quando executamos um arquivo em lote a partir do prompt de comando, geralmente não tendemos a chamá-lo assim, com um caminho absoluto entre aspas. Assim, podemos explorar essa diferença e executar a pausesomente quando os dois pontos existirem como o terceiro caractere, implicando que o arquivo em lote foi executado via arrastar e soltar. Claro, se você usar um caminho absoluto entre aspas para executar o arquivo em lote no prompt de comando, isso pausetambém acontecerá naturalmente.

Responder2

Coloque um cmd /kno final do seu script. Em uma janela existente ele apenas retornará ao prompt de comando, e em uma nova janela fará o mesmo, mantendo a janela aberta.

@echo off
echo "some text"
cmd /k

Observe que /k é para interromper a impressão de:

Microsoft Windows [versão 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Todos os direitos reservados.

informação relacionada