programacion off lenguaje hacer ejemplos ejecutar desde como comandos batch bat avanzados autoejecutable archivos archivo batch-file

batch-file - off - lenguaje batch



Script de línea de comandos.cmd/.bat, cómo obtener el directorio del script en ejecución (3)

¿Cómo se puede obtener el directorio del script que se ejecutó y usarlo dentro del archivo .cmd?


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

%~dp0

Utiliza la sintaxis de la extensión de parámetros por lotes. El parámetro 0 es siempre el script en sí mismo.

Si su script se almacena en C:/example/script.bat , entonces %~dp0 evalúa como C:/example/ .

ss64.com tiene más información sobre la sintaxis de extensión de parámetros. 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 se usa un parámetro para proporcionar un nombre de archivo, se puede aplicar la siguiente sintaxis extendida:

[...]

% ~ d1 Expandir% 1 a letra de unidad solamente - C:

[...]

% ~ p1 Expandir% 1 a una ruta solamente, por ej. / utils / esto incluye un rastreo / que algunos comandos pueden interpretar como un carácter de escape.

[...]

Los modificadores anteriores se pueden combinar:

% ~ dp1 Expandir% 1 a una letra de unidad y ruta solamente

[...]

Puede obtener la ruta de acceso 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 a la secuencia de comandos por lotes, por ejemplo, W: / scripts /


Raymond Chen tiene algunas ideas:

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

Citado aquí en su totalidad porque los archivos de MSDN tienden a ser poco confiables:

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

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

(Por supuesto, el directorio de guardar / restaurar podría haberse hecho más fácilmente con pushd / popd , pero ese no es el punto aquí).

El truco %CD% es útil incluso desde la línea de comando. Por ejemplo, a menudo me encuentro en un directorio donde hay un archivo en el que quiero operar, pero ... oh, necesito chdir a otro directorio 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 scratch).

Tipo SET /? para ver las otras pseudovariables proporcionadas por el procesador de comandos.

También vale la pena explorar los comentarios del artículo, por ejemplo, este:

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 del argumento especificado.


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

Source