Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: KF en 25 Septiembre 2008, 22:34 pm



Título: Problema con set /A 09 y 08
Publicado por: KF en 25 Septiembre 2008, 22:34 pm
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....


Título: Re: Problema con set /A 09 y 08
Publicado por: Darioxhcx en 25 Septiembre 2008, 23:03 pm
si le sacas el 0 de enfrente al 9 va bien xD
Código:
@echo off
set var1=8
set /A var2=%var1% * 2

ECHO Variable1: %var1%
ECHO Variable2: %var2%
pause
ahorano me preguntes por que =|
saludos


Título: Re: Problema con set /A 09 y 08
Publicado por: KF en 26 Septiembre 2008, 00:03 am
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...


Título: Re: Problema con set /A 09 y 08
Publicado por: Darioxhcx en 26 Septiembre 2008, 02:45 am
Código:
@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


Título: Re: Problema con set /A 09 y 08
Publicado por: carlitos.dll en 26 Septiembre 2008, 19:34 pm
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)

Código:
@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


Título: Re: Problema con set /A 09 y 08
Publicado por: KF en 28 Septiembre 2008, 20:32 pm
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.


Título: Re: Problema con set /A 09 y 08
Publicado por: sirdarckcat en 30 Septiembre 2008, 00:10 am
digo, hubieras podido hacer..
Código
  1. set y=09
  2. set /a y=1%y%-100
  3. echo %y%
  4.  
:P

te sirve para la fecha al menos

Saludos!!


Título: Re: Problema con set /A 09 y 08
Publicado por: carlitos.dll en 30 Septiembre 2008, 07:38 am
Que buena idea sirdarckat, no se me había ocurrido, y tiene mucha lógica.
Implementé tu idea al código.

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::::::::::::::::::::