miércoles, 10 de febrero de 2010

MSDOS II como manejar el resultado de un comando sin volcarlo a un fichero

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

sábado, 30 de enero de 2010

Para abrir una ventada de comandos MS-DOS (cmd) desde el menu de opciones (botón derecho) directamente en un directorio

Para abrir una ventada de comandos MS-DOS (cmd) desde el menu de opciones (poton derecho) directamente en un directorio, hay que crear las siguientes claves de registro (Inicio-> ejecutar -> regedit)

[HKEY_CLASSES_ROOT\Directory\shell\Abrir CMD]
@="Abrir cmd aqui"

[HKEY_CLASSES_ROOT\Directory\shell\Abrir CMD\command]
@="cmd.exe /k cd %1 "


Resulta bastante cómodo si ejecutas con frecuecia CMD

martes, 26 de enero de 2010

Tecnología nostálgica

Aunque parezca obsoleto, la utilicación de procesos bat y de la línea de comandos de MS-DOS (el cms, de los windows), puede sacarnos de mas de un problema.

En este artículo publicaremos algunas rutinas, como ejemplos, para que os sirvan de ayuda si alguna vez os encontrais en algún apuro.

Borrador de ficheros recursivo:
Con estas líneas ser borraran todos los ficheros que "cuelguen" del directorio que se pase como parámetro %1. (muy util para elminar virus persistentes). CUIDADO con el parámetro que se pasa perderás todos los ficheros del l directorio padre y sus hijos, no quiero ni pensar en una ejecución sobre el directorio raiz,

@echo off
if %1'==' GOTO ErrorParam
echo %1
rem elimina ficheros del directorio temporal
attrib -r -h -s -a "%1" /S /D
del /f /s /Q "%1"

goto FIN
:ErrorParam
echo Has olvidado INDICAR EL PATH A VACIAR "Vaciatemporales "
:FIN
rem ********