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 sale las 10 veces el Msg... parece que no lo cierra bien al For... ni idea :xDfor /L %%a in (1,1,10) do ( echo %%X )&Msg * Prueba 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 |