Todos conocemos como pasar el resultado de un comando a otro mediante el pipeline (|)
dir navs | find "archivos", nos presenta las líneas del resultado del comando dir que contienen la palabra archivos (1 archivos 207 bytes), sin embargo, si queremos utilizar el tamaño en bytes como una variable en nuestros proceses batch deberíamos volcarlo al un fichero, dir navs | find "archivos" > tam, pra procesarlo posteriormente o ¿no?. Podemos utilizar el FOR para procesar / almacenar los resultados de nuestros comandos
Existe dos casos que pueden interesarnos.
En primer lugar si queremos almacenar el resultado en una variable de nuestro porceso por lotes (fichero .bat). No es posible hacerlo con el comando SEt, ya que almacena literalmente el comando, no el resultado de su ejecución, y lo "lanza" cuando hacemos @echo. |
Sin embargo podemos recurrir al comando FOR. Si aunque parezca un sinsentido en la única opción. Usando el parámetro 'usebackq', el FOR utilizará el resultado de la ejecución, del comando incuido entre `` como entrada a procesar.
En función de lo que se pretenda hacer con el resultado deberemos utilizar los distintos parámetros (Token, delims,..) del FOR.
Asi, para tener en nuestra variable de entorno RUTA, el directorio de trabajo actual, ejecutaremos esta sentecia
Desde un proceso .bat
FOR /F "usebackq" %%i in (`cd`) do Set RUTA=%%i
Desde la línea de comandos
FOR /F "usebackq" %i in (`cd`) do Set RUTA=%i
O si pretendemos mostrar el lsitado de la ramas de una entrada del registro, podemos emplear
Desde un proceso .bat
FOR /F "tokens=1 usebackq delims=" %%i in (`reg query HKLM\SOFTWARE\Clients\StartMenuInternet /s`) do echo %%i
desde la línea de comandos
FOR /F "tokens=1 usebackq delims=" %i in (`reg query HKLM\SOFTWARE\Clients\StartMenuInternet /s`) do echo %i
Rizando el rizo, esta técnica nos permite encadenar varios resultados sin tener que pasar por un fichero de texto.
FOR /F "skip=1 tokens=* usebackq delims=\" %%k in (`reg query "HKLM\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\shell\open\command"`) do (FOR /F "tokens=3* delims= " %%l in ("%%k") do echo %%l)
Listará las entradas que cuelgan de las entradas de HKLM\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\shell\open\command
miércoles, 10 de febrero de 2010
Suscribirse a:
Entradas (Atom)