Problema con set /A 09 y 08

Iniciado por KF, 25 Septiembre 2008, 22:34 PM

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

KF

Al loro con el problema que tengo con el Set /A...

supuestamente es para pasar a numero una variable y poder calcular...y poder meterlo en otras variables...etc

Codigo correcto:
set var1=03
set /A var2=%var1%*2

ECHO Variable1: %var1%
ECHO Variable2: %var2%



Sin embargo, si la variable var1 la incializo con 08 o 09:
set var1=08
set /A var2=%var1%*2

ECHO Variable1: %var1%
ECHO Variable2: %var2%



Me da el siguiente error:
F:\>Prueba.cmd
Número no válido . Las constantes numéricas son decimales(17),
hexadecimales (0x11), u octales (021).
Variable1: 08
Variable2: 6



y se me quedan los valores anteriores en la var2.

Alguien podria indicar una idea feliz para resolver esto....

Darioxhcx

si le sacas el 0 de enfrente al 9 va bien xD

@echo off
set var1=8
set /A var2=%var1% * 2

ECHO Variable1: %var1%
ECHO Variable2: %var2%
pause

ahorano me preguntes por que =|
saludos

KF

Necesito que sea 09 y 08, ya que lo cojo de la variable Date del sistema.
08 es Agosto y 09 es Septiembre(este mes).

Necesito una funcion que me calcule el dia anterior.
Asi que no me funciona ni para Agosto ni para Septiembre...

Darioxhcx

@echo off
set a=%date:~4,1%
echo %a%
set /a b=%a% + 01
echo %b%
pause

no se si te servira, pero por hay podria darte una idea que se yo
saludos

carlitos.dll

no puedes ingresar a un set /a 08 o 09, porque anteponiendo 0 dices que es octal, y el conjunto de números octales va de 0 a 7.
La otra vez hice una función, que te retornaba la fecha, en tres variables, recursivamente. (La rescate del caché de google :D)


@echo off
rem Funcion recursiva que devuelve la fecha en formato decimal.
rem author CarlitoS.dll
rem %day% = dia
rem %month% = mes
rem %year% = agno

:date
if [%1]==[] (for /f "tokens=1-3 delims=-" %%a in ("%date%") do (call :date %%a %%b %%c))
if not [%1]==[] (
set day=%1
set month=%2
set year=%3
goto :eof
)
set day=%day:*0=%
set month=%month:*0=%
echo %day%
echo %month%
echo %year%
goto :eof

KF

Al final acabé haciendolo en un VBscript, algo mas de potencia... 2ª marcha

En msdos no se puede pasar a numero el 08 y 09, porque como has dicho carlitos.dll debe entenderlo como octal... es flipante... :-)
Los de microsoft no dejan de sorprenderme. Ya apuntaban maneras hasta en el msdos..

Bueno, muchas gracias a los dos.

sirdarckcat

digo, hubieras podido hacer..
Código (DOS) [Seleccionar]

set y=09
set /a y=1%y%-100
echo %y%

:P

te sirve para la fecha al menos

Saludos!!

carlitos.dll

#7
Que buena idea sirdarckat, no se me había ocurrido, y tiene mucha lógica.
Implementé tu idea al código.


@echo off
call:date
echo %day%
echo %month%
echo %year%
pause
goto :eof

::::::::::::::::::::Funcion::::::::::::::::::::
:date
if [%1]==[] (for /f "tokens=1-3 delims=-" %%a in ("%date%") do (call :date %%a %%b %%c))
if not [%1]==[] (
set /a day=1%1-100
set /a month=1%2-100
set /a year=%3
)
goto:eof
::::::::::::::::::::Funcion::::::::::::::::::::