Sé cómo hacer esto en /bin/sh, pero tengo algunos problemas en Windows.
Sé que puedes hacer aritmética con enteros con signo de 32 bits con
SET /a 2+2
4
¿Pero cómo paso esto al siguiente comando? Por ejemplo, el proceso que quiero realizar es el siguiente.
Las ediciones para consumidores de Windows no tienen una función de suspensión automática nativa (¿creo?): la mejor manera de realizar una suspensión es usarla PING
en asociación con el -n
interruptor para obtener esa cantidad de segundos, menos uno, de suspensión. El siguiente comando es eficaz para un sueño silencioso:
PING localhost -n 3 > NUL
Pero quiero asignarle un alias a esto como un comando de suspensión. Me gustaría que fuera elegante para que ingreses el número real de segundos que deseas dormir después del comando, ahora mismo puedo hacerlo.
DOSKEY SLEEP=PING 127.0.0.1 -n $1 > NUL
Lo cual funciona, pero siempre es 1 segundo menos que tu entrada, por lo que si quisieras dormir por un segundo tendrías que usar el comando SLEEP 2
. Eso no es exactamente ideal.
¿Hay alguna manera de pasar la aritmética $1+1
y pasarla al siguiente comando en Windows? Supongo que hay alguna forma de utilizar STDOUT...
Respuesta1
Prueba esto:
DOSKEY SLEEP==set /a t=$1+1 $G NULL $T PING 127.0.0.1 -n %t% $G NULL
Es $T
un separador de comandos equivalente a &
.
Tenga en cuenta que > NUL
redirige la salida de DOSKEY
en lugar de la macro. Puedes ver que no está incluido si lo haces DOSKEY /MACROS
. Para realizar la redirección que desea, agréguela $G NUL
al final de la línea como se muestra arriba.
Algo como esto también funcionará:
DOSKEY SLEEP=for /f %t in ('set /a $1+1') do @PING 127.0.0.1 -n %t $G NUL
Pruebe ambos y vea cuál funciona mejor para usted.
Respuesta2
Hasta donde yo sé, cmd.exe no ofrece funciones fácilmente disponibles para la evaluación de funciones en ejecución.
Si solo desea esperar 1 segundo más, simplemente inserte otro ping -n 2 127.0.0.1 en él.
Puede considerar la instalación del comando de suspensión desde elherramientas de administración del servidor de windows.
¿Qué tal una instalación de cygwin/powershell?
EDITAR: corregir la estupidez de mi parámetro de ping