Mostrando entradas con la etiqueta batch. Mostrar todas las entradas
Mostrando entradas con la etiqueta batch. Mostrar todas las entradas

jueves, 19 de mayo de 2011

Batch: Cargar en una variable la ruta actual o la ruta de ejecución


Aquí tenenemos dos formas de localizar desde un archivo batch la ruta


%CD% 
Esta variable contiene la ruta actual.

%~dp0
Esta variable contiene la ruta del archivo batch.



Ejemplo 1
En este ejemplo se puede apreciar el funcionamiento de ambas formas de localizar la ruta. La diferencia es que %CD% es la ruta actual, por lo que si cambia dentro del batch esta cambia, mientras que %~dp0 es la ruta del batch y no cambia en ningún momento.


@echo off
echo %CD%
e:
echo %CD%
echo %~dp0
Pause




Ejemplo 2

Este batch de DOS, mediante la variable %CD% localiza la ruta actual y la carga en otra variable que podrá ser utilizada más adelante por el programa.

set MIRUTA=%CD%
echo %MIRUTA% 
pause

Este es un pequeño truco que permite al batch saber desde donde se está ejecutando en cualquier momento y es el primer paso para hacer batch que interactuen adecuadamente con otros archivos, independientemente de su ubicación.

De esta forma podemos, por ejemplo llamarlo simplemente con un doble clic desde cualquier ubicación y que funcione, sin tener que acceder a el mediante linea de comandos. O también nos permitirá cargar en una variable la ruta actual de trabajo del mismo.


miércoles, 4 de mayo de 2011

Copiar el contenido de una carpeta a otra con Robocopy

Robocopy es un comando para Windows que amplia las posibilidades de xcopy de forma notable y que aparece en todas las versiones de Windows a partir de XP

Si en su sistema operativo no está disponible se puede descargar desde la web de Microsoft con el Resource Kit Tools

Podemos usarlo en scripts .cmd o .bat para crear ejecutables que cumplan una función concreta. Y combinarlo con el programador de tareas de Windows para poder ejecutar las tareas en un momento dado.

Ejemplo de uso

@echo off
REM # Uso:: ROBOCOPY origen destino [archivo [archivo]...] [opciones]
REM #
REM # origen :: Directorio de origen  (unidad:\ruta o \\servidor\recurso_compartido\ruta).
REM # destino :: Directorio de destino (unidad:\ruta o \\servidor\recurso_compartido\ruta).
REM # archivo:: Archivos para copiar  (nombres/comodines: el valor predeterminado es "*.*").
echo on
robocopy "\\nas\" "C:\nas\" /E /R:5 /W:5

El ejemplo anterior copia todo lo que hay en la carpeta de red "\\nas" a la carpeta "C:/nas"


Copiando el anterior código en un bloc de notas y guardándolo con la extensión bat ya lo tendremos listo para su uso.




Msdia80.dll instalado en el raíz de una unidad

¿Te has encontrado con este archivo en la unidad D y no sabes que hacer con el?

La solución a este problema la podemos encontrar en la página de soporte de Microsoft




Por mi parte y para facilitar el proceso he preparado este sencillo batch:

@echo Ejecutar en modo elevado con permisos de Administrador
@echo ------------------------------------------------------
@pause
move D:\msdia80.dll "C:\Program Files\Common Files\Microsoft Shared\VC\"
@pause
regsvr32 "C:\Program Files\Common Files\Microsoft Shared\VC\msdia80.dll"
@echo El proceso ha finalizado, asegurese de que no se han producido errores.
@pause


Copiando el anterior código en un bloc de notas y guardándolo con la extensión bat, con solo ejecutarlo en modo elevado se completará el proceso.

PS: Hay que tener en cuenta que el batch asume una ubicación de las rutas concreta.