¿Cómo "pausar" sólo si se ejecuta en una nueva ventana?

¿Cómo "pausar" sólo si se ejecuta en una nueva ventana?

He escrito un script por lotes que asume %1que es una ruta a un archivo. A veces me gustaría usar este script por lotes mediante arrastrar y soltar en el Explorador de Windows (arrastrando mi archivo de destino a mi archivo de script por lotes), y en otras ocasiones me gustaría ejecutar este script por lotes desde una ventana del símbolo del sistema existente y proporcionar mi %1ruta explícitamente (generalmente solo una ruta relativa).

No quiero que mi secuencia de comandos desaparezca inmediatamente al "arrastrar y soltar", por lo que necesito hacerlo pause. Sin embargo, no quiero tener que presionar any key to continuecada vez que uso una ventana de símbolo del sistema existente, por lo que no quiero pause.

¿Existe alguna manera de tener lo mejor de ambos mundos? ¿Puedo de alguna manera detectar/inferir el escenario en el que me encuentro y decidir pausar o no pausar a partir de entonces? ¿Cuál es el mejor enfoque aquí?

Respuesta1

Intente usar esto en su archivo por lotes:

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

Esto comprueba si el tercer carácter del argumento 0 (básicamente, el nombre del archivo por lotes) es dos puntos o no.

Normalmente, cuando arrastra y suelta algo en un archivo por lotes, se llama así: "Drive:\path\to\Batch File.bat" Arg1 Arg2 ...Sin embargo, cuando ejecutamos un archivo por lotes desde el símbolo del sistema, generalmente no tendemos a llamarlo así, con una ruta absoluta entre comillas. Por lo tanto, podemos aprovechar esta diferencia y ejecutar a pausesolo cuando los dos puntos existen como tercer carácter, lo que implica que el archivo por lotes se ejecutó mediante arrastrar y soltar. Por supuesto, si utiliza una ruta absoluta entre comillas para ejecutar el archivo por lotes desde el símbolo del sistema, naturalmente pausetambién lo hará.

Respuesta2

Lanza un cmd /kal final de tu guión. En una ventana existente simplemente volverá al símbolo del sistema y en una nueva ventana hará lo mismo, manteniendo la ventana abierta.

@echo off
echo "some text"
cmd /k

Tenga en cuenta que /k es para evitar que imprima:

Microsoft Windows [Versión 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.

información relacionada