Sé que %0
contiene la ruta completa del script por lotes, p. c:\path\to\my\file\abc.bat
¿Cómo obtener la ruta del script por lotes en Windows?
Me path
a ser igual a c:\path\to\my\file
¿Cómo podría lograr eso?
Sé que %0
contiene la ruta completa del script por lotes, p. c:\path\to\my\file\abc.bat
¿Cómo obtener la ruta del script por lotes en Windows?
Me path
a ser igual a c:\path\to\my\file
¿Cómo podría lograr eso?
%~dp0
será el directorio. Here's some documentation on all of the path modifiers. materia de la diversión :-)
Para quitar la barra invertida final, se puede utilizar la sintaxis :n,m
subcadena, así:
SET mypath=%~dp0
echo %mypath:~0,-1%
no creo que hay una manera de combinar la sintaxis %0
con la sintaxis :~n,m
, Desafortunadamente.
Excelente ... He estado usando '% ~ 0 \ ..' - ¡sabía que tenía que haber una manera mejor! Además, es probable que desee adjuntar '% ~ dp0' entre comillas dobles (' "" ') en caso de que haya espacios en el nombre del directorio, etc. – Cameron
¡Agradable! Pero, '% ~ dp0' contiene el' \ 'al final. ¿Tienes una idea de cómo eliminarlo? –
@Misha: supongo que quieres decir cómo eliminar el '\' al final. He actualizado mi respuesta con detalles. –
Eso sería la variable %CD%
.
@echo off
echo %CD%
%CD%
devuelve el directorio actual del archivo por lotes se encuentra.
% cd% devuelve el directorio desde el que se ejecutó el script, no el directorio en el que se encuentra el script. –
No, en realidad lo probé yo mismo: http://imgur.com/PzAMU.jpg – Ruel
solo funciona si el script no lo hace modifique el directorio de trabajo. Pruebe 'CD C: \ Temp
estoy trabajando en una máquina de Windows 7 y que han terminado usando las líneas de abajo para obtener la ruta de la carpeta absoluta para mi escritura del golpe.
Llegué a esta solución después de mirar http://www.linuxjournal.com/content/bash-parameter-expansion.
#Get the full aboslute filename.
filename=$0
#Remove everything after \. An extra \ seems to be necessary to escape something...
folder="${filename%\\*}"
#Echo...
echo $filename
echo $folder
El OP pregunta por los guiones de shell BAT/CMD de Windows, no por bash. – rivy
%~dp0
puede ser una ruta relativa. para convertirlo en una ruta completa, intentar algo como esto:
pushd %~dp0
set script_dir=%CD%
popd
Ok, ¿por qué no usar '% ~ dp0' directamente? – jpaugh
¿Una versión peor de la respuesta aceptada, publicada 5 años después? No entiendo. –
Imagino que esto se publicó para abordar el problema mencionado en los comentarios de la respuesta aceptada: '% ~ dp0' puede ser relativo, lo que puede o no ser un problema según el caso de uso –
Puede utilizar siguiente secuencia de comandos para obtener la ruta sin arrastre "\"
for %%i in ("%~dp0.") do SET "mypath=%%~fi"
Sin embargo, esto no elimina el nombre de archivo de la ruta (por ejemplo, abc.txt en el ejemplo de OP). – dcp
@dcp Er, lo hace, sin embargo. –
@Kyle Strand - Sí, lo intenté de nuevo y ahora está funcionando bien. No estoy seguro de qué pasó cuando lo probé originalmente, tal vez cometí un error en algún lugar del guión. Perdón por la confusión y gracias por señalarlo. – dcp
posible duplicado de [Línea de comando cmd/script .bat, cómo obtener el directorio del script en ejecución] (http://stackoverflow.com/questions/130112/command-line-cmd-bat-script-how-to-get-directory-of-running-script) –
posible duplicado de [¿Cómo pasar los parámetros de la línea de comando a un archivo por lotes?] (http://stackoverflow.com/questions/26551/how-to-pass-command-line-parameters-to-a-batch-file) – cybermonkey
Por cierto:% 0 no conta en la ruta completa si se llama al bate con una línea de comando relativa. Entonces, "% ~ dpf0" sería más confiable para este caso. – eckes