Haciendo aritmética y pasándola al siguiente comando

Haciendo aritmética y pasándola al siguiente comando

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 PINGen asociación con el -ninterruptor 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+1y 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 $Tun separador de comandos equivalente a &.

Tenga en cuenta que > NULredirige la salida de DOSKEYen 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 NULal 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

  1. Hasta donde yo sé, cmd.exe no ofrece funciones fácilmente disponibles para la evaluación de funciones en ejecución.

  2. Si solo desea esperar 1 segundo más, simplemente inserte otro ping -n 2 127.0.0.1 en él.

  3. Puede considerar la instalación del comando de suspensión desde elherramientas de administración del servidor de windows.

  4. ¿Qué tal una instalación de cygwin/powershell?

EDITAR: corregir la estupidez de mi parámetro de ping

información relacionada