Alberto Robledo Cotrina – Windows Tools and Tips

Consejos y Herramientas sobre Tecnologías Microsoft

Archive for the ‘Ficheros’ Category

Ejecucion de NTBackup desde Script con una Lista de Selección de Archivos y/o Carpetas

Posted by Alberto Robledo en noviembre 6, 2008

¿Habéis tenido alguna vez la necesidad de efectuar backups desde la línea de comandos o desde un script?

Cada gestor de backup tiene sus propios métodos… y NTBackup no podía ser menos. Éste permite generar un fichero de lista de selección con extensión BKS en el que se le indicarán, línea por línea, los ficheros o las carpetas a ser respaldados. Ahora bien, tiene truco… ya que el formato de fichero es Unicode.

La sintaxis de NTBackup es la siguiente:

  • NTBackup Backup @»Fichero de Seleccion.BKS» /M «Tipo de Backup» /J «Nombre de Trabajo» /F «Fichero Destino.BKF» /D «Descripción del Backup» /N «Nombre del Dispositivo» /V:YES /R:NO /L:f /RS:NO /HC:ON

Si queréis obtener más información sobre cada uno de los parámetros, podéis consultar la ayuda de NTBackup mediante el comando NTBackup /? (no tiene misterio alguno).

Ahora bien, se debe tener en cuenta que el fichero BKS debe ser generado en formato Unicode. Para ello existen, entre otros, dos modos sencillos de generar este fichero correctamente:

  • Generando el fichero de modo manual desde el Bloc de Notas, y guardando el fichero en formato Unicode (Encoding –> Unicode), y
  • Generando el fichero de modo automático desde un script, generando un fichero de texto de tipo Unicode.

Desde el Bloc de Notas no tiene ninguna complicación… y «el secreto» reside en generar el fichero en modo Unicode. Si os fijáis, la sintaxis del método CreateTextFile es la siguiente:

  • object.CreateTextFile(filename[, overwrite[, unicode]])

 El tercer parámetro de dicho método, cuando se habilita (True), guarda el fichero en formato Unicode… con lo que NTBackup será capaz de interpretar un fichero de selección generado de este modo.

Por ejemplo, un script que respalde de modo normal el directorio C:\Backup Folder, contendría lo siguiente:

Set fso = CreateObject(«Scripting.FileSystemObject»)
set ObjShell = CreateObject(«Wscript.Shell»)

strDestFolder    = «C:\Dest Folder»
strBackupFolder  = «C:\Backup Folder»
strBackupFile    = strDestFolder & «\Backup File.BKF»
strSelectionFile = strDestFolder & «\Selection File.BKS»

set objSelectionFile = fso.CreateTextFile(strSelectionFile,,True) ‘NOTA: Unicode = TRUE

objSelectionFile.WriteLine (strBackupFolder)

strNTBackupCmd = «NTBackup Backup » & Chr(34) & «@» & strSelectionFile & chr(34) & » /M Normal » & _
               » /J » & chr(34) & «Backup Job Name » & chr(34) & _
               » /F » & chr(34) & strBackupFile & chr(34) & _
               » /D » & chr(34) & «Backup Description» & chr(34) & _
               » /N » & chr(34) & «Backup Device Name » & chr(34) & _
               » /V:YES /R:NO /L:f /RS:NO /HC:ON»

‘  Wscript.Echo strNTBackupCmd

set objNTBackupCmd = Wscript.Exec(strNTBackupCMD)

Lo mejor de todo esto es que el contenido del fichero de selección, al ser generado desde un script, puede adaptarse a cualquier necesidad (por ejemplo, respaldando ficheros o carpetas generados en una fecha concreta).

Un saludo,

Alberto Robledo.

Posted in Lista de Seleccion, NTBackup, Scripts, Unicode, VBS | 1 Comment »

Generar Ficheros con Fecha/Hora desde un CMD

Posted by Alberto Robledo en octubre 23, 2008

No se si alguna vez os habréis encontrado con la necesidad de generar un fichero, a modo de log, con la fecha del día correspondiente, o la hora. Hacer esto en VBS es sencillo… pero ¿que ocurre si lo necesitas hacer en un BAT/CMD? ¿Se puede?

La respuesta es que, efectivamente, SE PUEDE… Puedes aprovechar la gestión de texto en cualquier variable de entorno. Yo he encontrado poca información (por no decir ninguna) de esta funcionalidad de la consola de comandos, y siempre que me ha surgido la necesidad, he tenido que volverme loco buscando «aquél CMD que tengo guardado donde hice esto…».

Vamos allá: En nuestro caso, utilizaremos el operador :~a,b, llamándole al final de la variable de entorno, y antes del último %.

Os explico su funcionamiento ya que es bastante complejo: El operador :~a,b se compone, como es evidente, de dos números, ‘a’ y ‘b’, tales que:

  • El número ‘a’ indica el inicio del texto a partir del que se obtiene el valor deseado (la primera posición es ‘0’), y
  • El número ‘b’ indica el número de caracteres que se desean tomar de dicho texto. Cabe destacar que, si ‘b’ es positivo, el texto indica las posiciones  tomadas desde el carácter número ‘a’ (inclusive) en adelante, y si ‘b’ es negativo, indica las posiciones tomadas desde el final del texto, hacia atrás, y hasta el número ‘a’

Como muestra, un botón. Generaremos nuestra variable de entorno del siguiente modo: set Texto=0123456789

Probaremos primero hacia delante:

  • Para obtener dos posiciones desde la quinta (+1 ya que empezamos en 0): echo %Texto:~5,2%, que nos devuelve el texto ‘56‘.
  • Para obtener tres posiciones, escribiremos echo %Texto:~5,3% que nos devuelve el texto ‘567‘…

Y ahora, hacia atrás:

  • Para eliminar los dos últimos carácteres, escribiremos echo %Texto:~5,-2% , lo que devuelve ‘567‘ (se «ha cargado» los dos últimos caracteres, ‘8’ y ‘9’),
  • Para eliminar el último carácter, escribiremos echo %Texto:~5,-1%… que devolverá ‘5678‘ ya que elimina el último carácter, el ‘9’.

Se le puede sacar el máximo jugo al operador anterior con las variables de entorno de hora y tiempo, y sobre todo en scripts de comandos. Por ejemplo, con una variable %Date% con valor 23/10/2008, tendremos que:

  • Echo %Date:~0,2% nos devolverá el día, ‘23‘,
  • Echo %Date:~3,2% nos devolverá el mes, ‘10‘, y
  • Echo %Date:~6,4% nos devolverá el año, ‘2008‘.

Lo mismo es aplicable a la hora: Con una variable %Time% con valor 14:08:09,52 tendremos que:

  • Echo %Time:~0,2% nos devolverá la hora, ‘14‘,
  • Echo %Time:~3,2% nos devolverá los minutos, ‘08‘, y
  • Echo %Time:~6,5% nos devolverá los segundos, ‘09,52‘.

Una vez entendido todo esto, podéis pasar a generar un fichero de texto de nombre, por ejemplo, «Log<FECHA><HORA>.log» de este modo:

  • Set Fecha=%Date:~0,2%%Date:~3,2%
  • Set Hora=%Time:~0,2%%Time:~3,2%
  • Echo «Texto Deseado» > Log%Fecha%%Hora%.log

Con las tres líneas anteriores se debe haber generado un fichero de texto de nombre Log23101408.log.

Puede ser complejo de entender, pero a mí me ha salvado ya de más de una… Con lo que os recomiendo que practiquéis, ya que un simple trozo de texto puede dar una potencia brutal a vuestros CMD.

Un saludo,

Alberto Robledo.

Posted in Fecha, Ficheros, Hora, Linea de Comandos, Scripts | 4 Comments »