
He escrito un script por lotes que asume %1
que 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 %1
ruta 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 continue
cada 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 pause
solo 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 pause
también lo hará.
Respuesta2
Lanza un cmd /k
al 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.