Las variables mágicas %n contienen los argumentos utilizados para invocar el archivo: %0es la ruta al archivo bat en sí, %1es el primer argumento después, %2es el segundo y así sucesivamente.
Dado que los argumentos son a menudo rutas de archivos, existe una sintaxis adicional para extraer partes de la ruta. ~des la unidad, ~pes la ruta (sin unidad), ~nes el nombre del archivo. Se pueden combinar, por lo que ~dpes drive + ruta.
%~dp0 Por lo tanto, es bastante útil en un murciélago: es la carpeta en la que reside el archivo de ejecución del murciélago.
También puede obtener otros tipos de metainformación sobre el archivo: ~tes la marca de tiempo, ~zes el tamaño.
Busque aquí una referencia para todos los comandos de línea de comandos. Los códigos de tilde-magic se describen a continuación para .
echo %~dp0no funcionará en la línea de comandos, solo en un archivo por lotes. Duh!%~d0y%~d0%?echo %~pd0da la misma salida que echo%~dp0(en lugar de inversa como se esperaba). Además, el valor de%0es diferente dependiendo de si hace doble clic en el archivo por lotes o lo ejecuta desde cmd.Son sustituciones variables mejoradas. Modifican las variables% N utilizadas en los archivos por lotes. Muy útil si te gusta la programación por lotes en Windows.
Puede encontrar lo anterior ejecutando
FOR /?.fuente
Sí, hay otros métodos abreviados que puede utilizar que se detallan a continuación. En su comando, ~ d0 significaría la letra de unidad del argumento 0.
Como el argumento 0 es la ruta del script, obtiene la letra de la ruta para usted. También puedes usar los siguientes atajos.
Esto también se puede encontrar directamente en el símbolo del sistema cuando ejecuta CALL /? o por /?
fuente
Desde el análisis de nombre de archivo en archivo por lotes y más modismos - Real's How-to :
La ruta (sin unidad) donde está el script: ~ p0
La unidad donde está el script: ~ d0
fuente
%~s0, el nombre completo del script.Otro consejo que sería una gran ayuda es que para establecer el directorio actual a una unidad diferente habría que utilizar
%~d0en primer lugar, a continuacióncd %~dp0. Esto cambiará el directorio a la unidad del archivo por lotes, luego cambiará a su carpeta.Para #oneLinerLovers,
cd /d %~dp0cambiará tanto la unidad como el directorio :)Espero que esto ayude a alguien.
fuente
pushd %~dp0, que no tiene problemas para cambiar la unidad actual, y le da la ventaja adicional de poderpopdvolver a la unidad / ruta original más adelante.%~d0le da la letra de unidad del argumento 0 (el nombre del script),%~p0la ruta.fuente
Algunas trampas a tener en cuenta:
Si hace doble clic en el archivo por lotes
%0, estará entre comillas. Por ejemplo, si guarda este archivo comoc:\test.bat:Al hacer doble clic se abrirá un nuevo símbolo del sistema con salida:
Pero si primero abre un símbolo del sistema y lo llama directamente desde ese símbolo del sistema,
%0se referirá a lo que haya escrito . Si escribetest.batEnter, la salida de%0no tendrá comillas porque no escribió comillas:Si escribe
testEnter, la salida de%0no tendrá extensión, porque no escribió extensión:Lo mismo para
tEsTEnter:Si escribe
"test"Enter, la salida de%0tendrá comillas (ya que las escribió) pero sin extensión:Por último, si escribe
"C:\test.bat", el resultado sería exactamente como si hubiera hecho doble clic en él:Tenga en cuenta que estos no son todos los valores posibles
%0porque puede llamar al script desde otras carpetas:Todos los ejemplos mostrados arriba también afectarán
%~0, porque la salida de%~0es simplemente la salida de%0comillas negativas (si las hay).fuente
Este código explica el uso del carácter ~ tilda, que fue lo más confuso para mí. Una vez que entendí esto, hace las cosas mucho más fáciles de entender:
fuente
Muestra la ubicación actual del archivo o directorio en el que se encuentra actualmente. Por ejemplo; si su archivo por lotes estaba en el directorio del escritorio, entonces "% ~ dp0" mostraría el directorio del escritorio. si desea que muestre el directorio actual con el nombre del archivo actual, puede escribir "% ~ dp0% ~ n0% ~ x0".
fuente