
Eu criei um script em lote que assume %1
ser 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 %1
path 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 continue
sempre 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 pause
somente 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 pause
também acontecerá naturalmente.
Responder2
Coloque um cmd /k
no 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.