2008-09-24 29 views

Respuesta

53

Raymond Chen tiene algunas ideas:

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx

Citado aquí en su totalidad ya que los archivos de MSDN tienden a ser poco fiables:

La manera más fácil es utilizar el %CD% pseudovariable. Se expande al directorio de trabajo actual .

set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory

(Por supuesto, directorio de almacenamiento/restauración podría más fácilmente han ha hecho con pushd/popd, pero ese no es el punto aquí.)

El %CD% truco es útil incluso desde la línea de comando. Por ejemplo, I a menudo me encuentro en un directorio donde hay un archivo en el que quiero operar pero ... oh, necesito chdir a otro directorio en orden para realizar esa operación.

set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args

(me gusta usar %_% como mi variable de entorno de cero.)

Tipo SET /? para ver los otros seudo-variables proporcionadas por el procesador de comandos .

también los comentarios en el artículo son bien vale la pena el escaneo por ejemplo ésta:

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741

Esto cubre el uso de% ~ dp0:

Si desea saber dónde vive el archivo por lotes: %~dp0

%0 es el nombre del archivo por lotes. ~dp le proporciona la unidad y la ruta de el argumento especificado.

+12

Esto no responde la pregunta. % CD% da el directorio actual, mientras que lo que se pidió fue el directorio del script. – ketorin

+3

** @ ketorin: ** Esto ** SÍ ** responde la pregunta. % CD% cambiará si el script cambia el directorio a lo largo de su uso (pushd/cd/..) pero **% ~ dp0 ** ** NO ** cambiará y siempre indicará dónde se encuentra el script. – Jay

+0

-1 No puedo decir si esto responde la pregunta o no. ¿Puedes mostrarme un ejemplo? –

135

Esto es equivalente a la trayectoria de la secuencia de comandos:

%~dp0 

Este utiliza la sintaxis extensión parámetro lote. El parámetro 0 es siempre el script en sí mismo.

Si su secuencia de comandos está almacenada en C:\example\script.bat, entonces %~dp0 evalúa a C:\example\.

ss64.com tiene más información sobre la sintaxis de la extensión de parámetro. Aquí está el extracto relevante:

Puede obtener el valor de cualquier parámetro usando un% seguido de su posición numérica en la línea de comando.

[...]

Cuando un parámetro se utiliza para suministrar un nombre de archivo a continuación, la siguiente sintaxis extendida se puede aplicar:

[...]

% ~ d1 Expand% 1 a una letra de unidad única - C:

[...]

% ~ p1 Expandir% 1 sólo a una ruta por ejemplo, \ utils \ esto incluye un seguimiento \ que algunos comandos pueden interpretar como un carácter de escape.

[...]

Los modificadores anteriores pueden combinarse:

% ~% DP1 Expandir 1 a una letra de unidad y ruta

[...]

Puede obtener la ruta del script por lotes con% 0, las extensiones de parámetros se pueden aplicar a esto, por lo que% ~ dp0 devolverá la unidad y la ruta al script por lotes, por ejemplo W: scripts \ \

+0

Exactamente lo que necesitaba. Y conecté este guión a mi blog, como recordatorio :) –

+0

No estoy seguro de si es un error/error en el texto citado, pero en mi script necesito "% ~ d0" para obtener la letra de la unidad. % ~ d1 está vacío en mi caso. – eftokay83

+0

En mi opinión/situación esto es superior a la respuesta aceptada.Si ejecuta un script de línea de comando "como Administrador" (haga clic derecho sobre él) su script se ejecutará desde Windows \ system32. La respuesta aceptada NO le dará la ubicación del script, le dará Windows \ system32 nuevamente. Es decir. ESTA respuesta te ayuda a arreglar eso, comienzas tu script con cd% ~ dp0 –

1
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d 

pushd %curdir% 

Source

Cuestiones relacionadas