Comportamiento inesperado [FOR+PAUSE]

Iniciado por leogtz, 28 Diciembre 2008, 18:00 PM

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

leogtz

Bueno esto realmente me sorprendio, segun mi experiencia haciendo scripts en Batch, pense que el siguiente script generaria algo como esto :


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


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



Pero da un comportamiento inesperado :

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 ")" ) :
)&PAUSE


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



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


Saludos a todos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Pony-Magic

#1
mmm..., que raro.
tambien

@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

kraszic

no se muy bien si te interesa esa estructura en particular.
Yo pienso que el problema es del "&"

Asi me funciona perfecto

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


saludos

leogtz

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

@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 :
)&PAUSE
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

kraszic

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

@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

sirdarckcat

&, |, 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