¿Cómo se puede obtener el directorio del script que se ejecutó y usarlo dentro del archivo .cmd?Script de línea de comandos .cmd/.bat, cómo obtener el directorio del script en ejecución
Respuesta
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.
Esto no responde la pregunta. % CD% da el directorio actual, mientras que lo que se pidió fue el directorio del script. – ketorin
** @ 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
-1 No puedo decir si esto responde la pregunta o no. ¿Puedes mostrarme un ejemplo? –
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 \ \
Exactamente lo que necesitaba. Y conecté este guión a mi blog, como recordatorio :) –
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
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 –
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d
pushd %curdir%
- 1. Cómo obtener el directorio del script jmeter en Jmeter
- 2. Ejecutar línea de comandos en WiX Script?
- 3. ¿Directorio actual del script de Shell?
- 4. Obtener el directorio de un archivo de script bash en
- 5. ¿Cómo escribir la salida del script en el archivo y la línea de comandos?
- 6. comandos de ejecución de Python Script en la Terminal
- 7. Obtienen el directorio base del script actual
- 8. Cómo empaquetar una línea de comandos Script de Python
- 9. ¿Cómo obtener la ruta del script en R?
- 10. Ruta del script powershell actualmente en ejecución
- 11. Detener la ejecución del script de Ruby
- 12. MySQL Incluir un script dentro del script
- 13. ¿Cómo ejecuto un script arbitrario con un directorio de trabajo del directorio en el que está?
- 14. ¿Cómo obtener el nombre de un script de Python en ejecución?
- 15. comandos de ejecución cuando shell script se mató
- 16. obtener el directorio actual de script php symlink'd y no real script php
- 17. Cómo: script de MATLAB que se pueden obtener argumentos de Unix de línea de comandos
- 18. 'Memcache' no encontrado en la línea de comandos script PHP
- 19. ¿Cómo ejecutar comandos de script desde variables?
- 20. Ejecución del script Hook en el lado del cliente
- 21. Retrasar la ejecución del script PHP
- 22. ¿Cómo obtener salida de grep en una sola línea en el script de shell?
- 23. SQLCMD, variables de línea de comandos y script: setvar
- 24. Seguimiento del tiempo de ejecución del script en PHP
- 25. script de línea de comandos php no se ejecuta
- 26. Cómo detener el script por lotes en falla del
- 27. leer el contenido de un directorio utilizando script de shell
- 28. Script de PowerShell para obtener un tamaño total de directorio
- 29. ¿Cómo obtener el segundo último argumento del script de shell?
- 30. jQuery Confirme el cuadro que detiene la ejecución del script
posible duplicado de [? Cómo obtener la ruta del script por lotes en Windows] (http://stackoverflow.com/questions/3827567/how- to-get-the-path-of-the-lot-script-in-windows) – Celada