Cómo ejecutar unos archivos BATCH independientemente si están en C o en D?

18/11/2003 - 09:23 por anonymous | Informe spam
Tengo unos archivos batch (*.bat) que tengo que ejecutar
en varias máquinas y los ficheros a ejecutar se
encuentran dentro de distintas carpetas que dependen de
la carpeta PRUEBA.
El problema es que en algunas máquinas PRUEBA depende de
C:\ (C:\PRUEBA) y en otras máquinas dependen de D:\
(D:\PRUEBA) y esto no LO puedo cambiar y me tienen que
funcionar en cualquier máquina.
Actualmente las llamadas a los distintos ejecutables en
los archivos *.bat están direccionados a C:\Prueba por lo
que cuando lo quiero ejecutar en alguna máquina que está
en D ME DA ERROR.
Hay alguna manera de referirse a la raíz
independientemente de si esta está en C o en D.
(No se si ayuda pero es el Agente del SQL Server a través
de un Job (trabajo) que llama a estos .BAT)
 

Leer las respuestas

#1 Ramón Sola [MS MVP]
20/11/2003 - 18:04 | Informe spam
Podrías usar \Prueba en todos los casos, es decir, retirar la letra de unidad, pero eso obligaría a ejecutar el .bat siempre desde un directorio contenido en la misma unidad que el directorio Prueba.

Otra solución sería modificar el fichero BAT como sigue (asumo que no hay ningún Windows 9x):
setlocal
if exist c:\pruebaul set unidad=c & goto sigue
if exist d:\pruebaul set unidad=d & goto sigue
echo Error: No se encuentra el directorio Prueba en ninguna unidad.
goto fin
sigue:
[el fichero BAT tal como era, pero sustituyendo todos los c:\prueba por %unidad%:\prueba]
:fin
endlocal

Ojo, esto no funcionaría correctamente en Windows 9x; Command.com desconoce las directivas setlocal y endlocal, y el operador & de separación de comandos.
Esto intentaría detectar en qué unidad se encuentra el directorio Prueba. Sólo comprueba las unidades C y D, pero con una sencilla modificación puede extenderse a más unidades. Además, una vez encontrado el directorio en una unidad, no sigue comprobando más unidades.
Para comprobar desde la C hasta la Z:
for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) if exist %%a:\pruebaul set unidad=%%a & goto sigue
Ramón Sola, Málaga (España) / MS MVP Windows - Shell/User
(yanoseashooligan -> yahoo)
La concesión del título MVP no implica subordinación a Microsoft,
sólo reconocimiento de labores altruistas de soporte *gratuito*.
Se ruega dar respuestas en el grupo, así aprenderemos todos.


Mientras Ramón estaba pensando una frase para esta cabecera, anonymous
() escribió:
Tengo unos archivos batch (*.bat) que tengo que ejecutar
en varias máquinas y los ficheros a ejecutar se
encuentran dentro de distintas carpetas que dependen de
la carpeta PRUEBA.
El problema es que en algunas máquinas PRUEBA depende de
C:\ (C:\PRUEBA) y en otras máquinas dependen de D:\
(D:\PRUEBA) y esto no LO puedo cambiar y me tienen que
funcionar en cualquier máquina.
Actualmente las llamadas a los distintos ejecutables en
los archivos *.bat están direccionados a C:\Prueba por lo
que cuando lo quiero ejecutar en alguna máquina que está
en D ME DA ERROR.
Hay alguna manera de referirse a la raíz
independientemente de si esta está en C o en D.
(No se si ayuda pero es el Agente del SQL Server a través
de un Job (trabajo) que llama a estos .BAT)

Preguntas similares