Cambiar el directorio actual al directorio de archivos por lotes

18

Tengo un batarchivo en Windows que ejecuta una operación procdump . El problema con el archivo por lotes es que primero necesito cd al directorio de archivos por lotes antes de ejecutar el trabajo, de lo contrario, el script no funcionará.

¿Cómo cambiar al directorio actual de archivos por lotes?

Intenté el siguiente código en mi procdump.bat:

cd "%~dp"
procdump -h devenv.exe mydump.txt

Pero falló, el mensaje de error es:

El siguiente uso del operador de ruta en la sustitución de parámetros por lotes no es válido:% ~ dp "

Para formatos válidos, escriba CALL /? o por /?

Editar: la respuesta proporcionada funciona, pero solo hay un problema: si mi directorio actual es diferente al directorio de archivos por lotes, obtendría un "El sistema no puede encontrar la ruta especificada". Alguien tiene alguna idea?

Graviton
fuente
¿De dónde sacas ese "% ~ dp"?
fretje

Respuestas:

24

Ok, creo que encontré aquí a qué te refieres %~dp.

Creo que lo que realmente quieres hacer es esto:

cd /D "%~dp0"

(!) Pero tenga en cuenta que esto todavía no le dará el comportamiento correcto cuando intente ejecutar su lote mientras el directorio actual está en otra unidad, ya cdque no cambia la unidad activa.

Editar : Aparentemente (gracias @Yoopergeek ) puede agregar el /Dparámetro al cdcomando para permitir que también cambie la unidad activa.

fretje
fuente
Para obtener más información sobre estos parámetros por lotes, consulte help callen un cmdmensaje.
Pausado hasta nuevo aviso.
Por cierto, puede combinar esos parámetros como este:%~dp0
pausa hasta nuevo aviso.
Tu respuesta es útil; pero si mi directorio actual está en un directorio diferente al del archivo por lotes, entonces el comando anterior fallará; incluso cd /Do cd "%~dp0" /Dno puedo ayudar.
Graviton
@Ngu Soon Hui: Era obvio que su directorio actual está en un directorio diferente al del archivo por lotes. ¿Pero por qué fallaría ese comando? Lo probé aquí y funciona.
fretje
1
He encontrado la solución usando cd /D "%~dp0". Gracias.
Graviton
4

Dejaría un comentario a la respuesta de fretje, pero evidentemente no puedo.


De todos modos, con respecto a la nota:
Pero tenga en cuenta que esto aún no le dará el comportamiento correcto cuando intente ejecutar su lote mientras el directorio actual está en otra unidad, ya que el CD no cambia la unidad activa.


Use el /Dinterruptor en el comando de su CD, y el CD cambiará la unidad activa.

Yoopergeek
fuente
... pero puedo comentar mi propia respuesta. Hombre, es una mierda no tener representante en ServerFault ... desearía que algún representante de SO 'sangrara' hasta aquí.
Yoopergeek
1
@Yoopergeek: puede asociar sus cuentas. Eso le dará 100 repeticiones aquí si su repetición en SO es superior a 200.
fretje