Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: leogtz en 28 Diciembre 2008, 18:00 pm



Título: Comportamiento inesperado [FOR+PAUSE]
Publicado por: leogtz en 28 Diciembre 2008, 18:00 pm
Bueno esto realmente me sorprendio, segun mi experiencia haciendo scripts en Batch, pense que el siguiente script generaria algo como esto :

Código:
ALLUSERSPROFILE
APPDATA
CLIENTNAME
CommonProgramFiles
COMPUTERNAME
ComSpec
Desktop
FP_NO_HOST_CHECK
HOMEDRIVE
HOMEPATH
LOGONSERVER
NUMBER_OF_PROCESSORS
OS
Path
PATHEXT
PROCESSOR_ARCHITECTURE
PROCESSOR_IDENTIFIER
PROCESSOR_LEVEL
PROCESSOR_REVISION
ProgramFiles
PROMPT
SESSIONNAME
SystemDrive
SystemRoot
TEMP
TMP
USERDOMAIN
USERNAME
USERPROFILE
windir
Presione una tecla para continuar . . .

Código:
@ECHO OFF
FOR /F "TOKENS=1 DELIMS==" %%X IN ('SET') DO (
ECHO.%%X
)&PAUSE


Pero da un comportamiento inesperado :
Código:
ALLUSERSPROFILE
Presione una tecla para continuar . . .
APPDATA
Presione una tecla para continuar . . .
CLIENTNAME
Presione una tecla para continuar . . .
CommonProgramFiles
Presione una tecla para continuar . . .
COMPUTERNAME
Presione una tecla para continuar . . .
ComSpec
Presione una tecla para continuar . . .
Desktop
Presione una tecla para continuar . . .
FP_NO_HOST_CHECK
Presione una tecla para continuar . . .
HOMEDRIVE
Presione una tecla para continuar . . .
HOMEPATH
Presione una tecla para continuar . . .
LOGONSERVER
Presione una tecla para continuar . . .
NUMBER_OF_PROCESSORS
Presione una tecla para continuar . . .
OS
Presione una tecla para continuar . . .
Path
Presione una tecla para continuar . . .
PATHEXT
Presione una tecla para continuar . . .
PROCESSOR_ARCHITECTURE
Presione una tecla para continuar . . .
PROCESSOR_IDENTIFIER
Presione una tecla para continuar . . .
PROCESSOR_LEVEL
Presione una tecla para continuar . . .
PROCESSOR_REVISION
Presione una tecla para continuar . . .
ProgramFiles
Presione una tecla para continuar . . .
...

Aqui se ve que el for esta cerrado ya (con el ")" ) :
Código:
)&PAUSE

Pero funciona como si fuera de esta manera :
Código:
@ECHO OFF
FOR /F "TOKENS=1 DELIMS==" %%X IN ('SET') DO (
ECHO.%%X
PAUSE
)


Otro ejemplo de uso es con el argumento /L :
Código:
@ECHO OFF
FOR /L %%X IN (1,1,10) DO (
ECHO.%%X
)&PAUSE

Saludos a todos.


Título: Re: Comportamiento inesperado [FOR+PAUSE]
Publicado por: Pony-Magic en 28 Diciembre 2008, 22:15 pm
mmm..., que raro.
tambien
Código:
@echo off
for /L %%a in (1,1,10) do (
echo %%X
)&Msg * Prueba
sale las 10 veces el Msg... parece que no lo cierra bien al For... ni idea  :xD


Título: Re: Comportamiento inesperado [FOR+PAUSE]
Publicado por: kraszic en 28 Diciembre 2008, 23:52 pm
no se muy bien si te interesa esa estructura en particular.
Yo pienso que el problema es del "&"

Asi me funciona perfecto

Código:
@ECHO OFF
FOR /F "TOKENS=1 DELIMS==" %%X IN ('SET') DO (
ECHO.%%X
)
pause

saludos


Título: Re: Comportamiento inesperado [FOR+PAUSE]
Publicado por: leogtz en 29 Diciembre 2008, 01:45 am
no se muy bien si te interesa esa estructura en particular.
Yo pienso que el problema es del "&"

Asi me funciona perfecto

Código:
@ECHO OFF
FOR /F "TOKENS=1 DELIMS==" %%X IN ('SET') DO (
ECHO.%%X
)
pause

saludos

Creo que no me explique, se bien como funciona el FOR.

El post no era una duda ni un problema, era solo para relatar el comportamiento de :
Código:
)&PAUSE


Título: Re: Comportamiento inesperado [FOR+PAUSE]
Publicado por: kraszic en 29 Diciembre 2008, 16:03 pm
ya se q lo q querias era solo explicarlo.
Yo solo te he dicho q pienso q el problema es del "&" parece como si el ")" tiene q estar al final de la linia.

Si te fijas, el problema no lo da solo con el pause, prueba a poner ")&cualquiercomando" y ya veras como tambien pasa lo mismo.

Ejemplo

Código:
@ECHO OFF
FOR /F "TOKENS=1 DELIMS==" %%X IN ('SET') DO (
ECHO.%%X
)&echo loquesea
pause

Seguramente es un error q no tendria q pasar pero se habra pasado por alto...

saludos


Título: Re: Comportamiento inesperado [FOR+PAUSE]
Publicado por: sirdarckcat en 29 Diciembre 2008, 20:55 pm
&, |, etc.. unen 2 comandos en uno solo, por lo que

DO (lalala...)&otracosa

hacen el comando (lalala...)&otracosa

es decir, el hecho de que pensaras que se ejecutaria al final es incorrecto, si quisieras eso, tendrias que concatenar el &pause al comando for

(FOR ... DO (...))&pause