Ninguna de estas instrucciones son nuevas y probablemente muchos de ustedes las conozcan, pero al menos yo me tarde un rato en encontrar la forma correcta de utilizarlas, así que les dejo un pequeño resumen por si, por alguna extraña razón las llegan a utilizar = ).
Recientemente me vi en la necesidad de programar un Script (.cmd) para hacer un Backup desde la línea de comando desde MS-DOS, el script parecía ser bastante sencillo, tenia que comprimir una carpeta desde la línea de comandos utilizando 7zip , guardar el archivo con un nombre que incluyera como prefijo la fecha, en formato YYY_MM_DD, ejemplo: 2009_05_11Backup1.7z.
El primero problema que tuve con el script , fue ¿Como obtener el año, el mes y el día desde la línea de comando en tres variables separadas?
Si utilizamos la instrucción
c:\>date /t
obtenemos la fecha en formato DD/MM/AAAA, pero lo que queremos es almacenar en variables separadas el año, el mes y día actual.
Dentro de un archivo cmd, esto lo podemos hacer con la instrucción FOR de MS-DOS con la cual podemos hacer un parseo de esa fecha con la siguiente instrucción:
for /f "tokens=1,2,3 delims=/" %%a in ('date /t') do set fec= %%c_%%b_%%a
Con esta instrucción le decimos al Script que por cada línea que le regrese la instrucción ‘date /t’ (en este caso una sola línea), debe de parsear esa línea utilizando como delimitador ‘/’ , obtener los tokens 1,2 y 3 y guardar los resultados en la variable fec, separándolos con un guión bajo.
De esta forma si el dia es 11/05/2012, se guardara en la variable fec 2012_05_11
El segundo problema es que el FOR regresa fecha con algunos espacios en blanco y en lugar de tener:
fec=”2012_05_11″
se tiene
fec=”2012_05_11 “
En particular el problema podría plantearse como, ¿Como hacemos un TRIM desde MSDOS? y en general podría ser, como hacemos un Search & Replace en una cadena desde la línea de comandos en MSDOS
Pues resulta que SI existe una forma de hacerlo desde MSDOS y es parte de la sintaxis (es decir, no es una instrucción en particular)
La forma de hacerlo es la siguiente:
set var2=%var1:StrToFind=NewStr%
Con lo cual le indicamos que busque la cadena StrToFInd en la variable var1 , la substituya con NewStr y lo asigne a la variable var2
En nuestro caso lo que queremos es quitar los espacios en blanco, suponiendo que ya tenemos en la variable fec la fecha almacenada la instrucción seria la siguiente:
set fec=%fec: =%
Es decir, le pedimos que busque los espacios en blanco en fec y que los sustituya por “nada”. Con lo cual estamos haciendo un Trim desde MSDOS.
Para mas información
http://www.ss64.com/nt/for_cmd.html
http://www.ss64.com/nt/syntax-replace.html



Leave a Reply