[BAT] Duda con FOR

Iniciado por ovichan, 12 Julio 2012, 05:24 AM

0 Miembros y 1 Visitante están viendo este tema.

ovichan

Bueno estoy ajustando un script que tenía para que el apagado se realice a una hora, y queria que en la pantalla mostrase la hora en la que se iniciara el apagado. Como no se si se puede operar con horas, lo que he intentado es extraer los caracteres de la variable %time% para sumarle a cada un token su correspondiente valor. El caso es que con for, me incluye un espacio que intento quitar pero no puedo. He realizado el mismo proceso y con exito con los extractores de caracteres, pero queria probar con el FOR. Os pongo la trivialidad del codigo.

@echo off
set /p min="Minutos antes de apagar: "
set /a sec=60*%min%

:: Opcion con extractores de caracteres

rem set h=%time:~0,2%
rem set m=%time:~3,2%
rem set s=%time:~6,2%
rem set ms=%time:~9,2%

:: Opcion con un bucle

for /F "tokens=1,2,3,4 delims=:," %%H in ("%time%") do set h=%%H && set m=%%I && set s=%%J && set ms=%%K

rem set /a m=%m%+%min%

rem IF - if %m% GEQ 60 set /a h=%h%+(%m%/60) && set /a m=(%m%)%%60

echo %h%:%m%:%s%,%ms%

pause


la salida seria: 11 :12 :23 ,70. Y desearia saber como podria hacer que extraiga los valores sin los espacios para que se muestre asi: 11:12:23,70.

Imagino que es una boberia pero es una curiosidad mas. ^^

Binary_Death

Código (dos) [Seleccionar]


@echo off
set /p min="Minutos antes de apagar: "
set /a sec=60*%min%

:: Opcion con extractores de caracteres

rem set h=%time:~0,2%
rem set m=%time:~3,2%
rem set s=%time:~6,2%
rem set ms=%time:~9,2%

:: Opcion con un bucle

for /F "tokens=1,2,3,4 delims=:," %%H in ("%time%") do set "h=%%H" && set "m=%%I" && set "s=%%J" && set "ms=%%K"

rem set /a m=%m%+%min%

rem IF - if %m% GEQ 60 set /a h=%h%+(%m%/60) && set /a m=(%m%)%%60

echo %h%:%m%:%s%,%ms%

pause


Pasa que al estar concatenados los sets por &&, la definición de la variable abarca hasta precisamente ese carácter. Encerrando entre comillas defines lo que forma parte de la variable, y por tanto omites cualquier espacio que haya después  :P

Saludos!

ovichan

Gracias por tu respuesta, no pensaba yo que seria por eso... este lenguaje es muy meticuloso en ciertos aspectos, x eso me gusta tanto \O/.

Saludos

Binary_Death

De nada  ;)
Una cosa más que noté, sin importancia, pero ya que quieres profundizar...
Estás usando && para concatenar esos comandos "set". Ten en cuenta que el símbolo && lo que hace es ejecutar el posterior comando siempre y cuando el errorlevel del ejecutado sea 0. Esto es:

Código (dos) [Seleccionar]

@Echo Off
comandoquenoexiste && Echo.Hola Mundo
pause 1>nul
exit


Puesto que "comandoquenoexiste" dará un errorlevel distinto de 0 (es decir, que dará error), el próximo comando, el "Echo", no se ejecutará.

En tu caso, sería mejor usar únicamente &, que lo que hace es ejecutar el siguiente comando siempre, sea cual sea el errorlevel del anterior.

Si lo sabías, mejor, pero si no, tenlo en cuenta  :P

Saludos!

ovichan

Si, habia leido que utilizando solo un &, la lectura se interrumpe hasta que se deja de cumplir la condicion (o algo asi) y con && lee toda la linea. La verdad es que no habia caido en que ante errores es mejor usar la opcion que tu marcas. Saludos y gracias  ;-)

Binary_Death

Más o menos pero al revés. En el otro post te lo expliqué mejor ;)