2010-09-29 20 views
5

Tengo un problema al llamar a un archivo por lotes desde otro archivo por lotes cuando intento ejecutar todo usando Process.Start. Básicamente yo llamo la ejecución de un archivo por lotes desde mi # programa de C que tiene este aspecto:Incluir un archivo por lotes en un archivo por lotes


call include.bat 

//execute the rest of the batch file here 

El archivo include.bat establece caminos y puede ser utilizado por un número de otros archivos por lotes. Cuando ejecuto el Process.Start a veces esto funciona y a veces obtengo ERROR: cannot find include.bat. Antes que nada, ¿alguna idea de por qué sucede esto? ¿Y las ideas sobre cómo solucionar esto desde el archivo por lotes?

Respuesta

7

para cambiar al directorio de su archivo por lotes se encuentra en, utilice esto:

cd %~dp0 

Lo hago en casi todos mis scripts batch. De esa manera, las rutas relativas siempre deberían funcionar.

+0

gracias por eso – Dimitris

+0

Puede marcarlo como respuesta si resolvió su problema. :) – Botz3000

+1

Normalmente establezco una var para que el script sea más legible por el ser humano: SET CDIR =% ~ dp0 – djangofan

1

Lo primero que intentaría es utilizar la información de ruta completa en la declaración de llamada para include.bat. Si eso lo soluciona, probablemente no estés ejecutando el archivo por lotes desde la ubicación correcta. Estoy seguro de que hay una capacidad de "directorio de trabajo" en C#, no estoy seguro de qué se trata.

1

¿Establece ProcessStartInfo.WorkingDirectory (http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx) en ProcessStartInfo que pasa a Process.Start?

Como a veces no se puede encontrar include.bat, el directorio de trabajo puede estar equivocado (no la carpeta donde se encuentra include.bat).

+0

Debo admitir que no hago eso. ¿Hay alguna forma de solucionarlo al menos temporalmente desde el archivo por lotes? – Dimitris

+0

Use cd% ~ dp0 según lo indicado por Botz3000 arriba. –

+0

gracias por eso – Dimitris

2

Antes de la escritura, trate CD /D %~dp0

+1

Posiblemente sea tu derecho. Es posible que el CD no funcione si significa cambiar a una letra de unidad diferente, pero con el modificador/D, quizás lo haga. No lo intenté, pero es una buena idea ... – djangofan

2

Sé que esto es una vieja pregunta, pero pensé que valdría la pena señalar que el enfoque promovido por la respuesta aceptada (es decir, cambiar el directorio de trabajo) no siempre puede ser apropiada.

Una mejor enfoque general es para referirse a las dependencias de la ruta completa:

call "%~dp0include.bat" 

(Desde% ~ dp0 ya se termina con una barra invertida, no es necesario añadir otro.)

Éstos son algunos de los beneficios de no cambian el directorio de trabajo:

  1. El resto del archivo de proceso por lotes aún puede usar el directorio de trabajo original.
  2. El directorio de trabajo original en el símbolo del sistema se conserva, incluso sin "SETLOCAL".
  3. Si el primer archivo por lotes se ejecuta a través de una ruta UNC (como "\\ server \ share \ file.bat"), la llamada de ruta completa tendrá éxito mientras changing the directory (even with "cd /d") will fail. (El uso de pushd/popd manejaría este punto, pero tienen su propio conjunto de problemas.)

Estos beneficios son particularmente importantes para los archivos por lotes de tipo alias, incluso si no son tan importantes para la situación específica que Motivó esta pregunta.

Cuestiones relacionadas