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

2

Eu criei um script em lote que assume %1 como um caminho para um arquivo. Às vezes eu gostaria de usar este script em lote através de arrastar-soltar no Windows Explorer (arrastando meu arquivo de destino para o meu arquivo de script em lotes) e em outras vezes gostaria de executar este script em lote a partir de uma janela de prompt de comando existente e fornecer meu %1 caminho explicitamente (geralmente apenas um caminho relativo).

Não quero que meu script desapareça imediatamente quando "arrastar soltando", portanto, preciso de pause . No entanto, não quero ter que pressionar any key to continue toda vez que 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 pausar ou não pausar depois disso? Qual é a melhor abordagem aqui?

    
por DuckMaestro 04.01.2013 / 02:51

2 respostas

4

Tente usar isso no seu arquivo de lote:

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

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

Normalmente, quando você arrasta e solta algo em um arquivo de lote, ele é chamado de: "Drive:\path\to\Batch File.bat" Arg1 Arg2 ... No entanto, quando executamos um arquivo de lote do Prompt de Comando, geralmente não o chamamos assim, com um caminho absoluto entre aspas. Assim, podemos explorar essa diferença e executar um pause somente quando os dois-pontos existirem como o terceiro caractere, o que significa que o arquivo em lote foi executado por meio de arrastar e soltar. Obviamente, se você usar um caminho absoluto entre aspas para executar o arquivo em lote a partir do prompt de comando, ele também será pause .

    
por 04.01.2013 / 04:34
3

Jogue um cmd /k no final do seu script. Em uma janela existente, ela retornará ao prompt de comando e, em uma nova janela, fará o mesmo, mantendo a janela aberta.

@echo off
echo "some text"
cmd /k

Note que o / k é para parar de imprimir:

Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved.

    
por 04.01.2013 / 02:58