Las variables mágicas %
n contienen los argumentos utilizados para invocar el archivo: %0
es la ruta al archivo bat en sí, %1
es el primer argumento después, %2
es 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. ~d
es la unidad, ~p
es la ruta (sin unidad), ~n
es el nombre del archivo. Se pueden combinar, por lo que ~dp
es 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: ~t
es la marca de tiempo, ~z
es 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 %~dp0
no funcionará en la línea de comandos, solo en un archivo por lotes. Duh!%~d0
y%~d0%
?echo %~pd0
da la misma salida que echo%~dp0
(en lugar de inversa como se esperaba). Además, el valor de%0
es 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
%~d0
en 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 %~dp0
cambiará 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 poderpopd
volver a la unidad / ruta original más adelante.%~d0
le da la letra de unidad del argumento 0 (el nombre del script),%~p0
la 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,
%0
se referirá a lo que haya escrito . Si escribetest.bat
Enter, la salida de%0
no tendrá comillas porque no escribió comillas:Si escribe
test
Enter, la salida de%0
no tendrá extensión, porque no escribió extensión:Lo mismo para
tEsT
Enter:Si escribe
"test"
Enter, la salida de%0
tendrá 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
%0
porque puede llamar al script desde otras carpetas:Todos los ejemplos mostrados arriba también afectarán
%~0
, porque la salida de%~0
es simplemente la salida de%0
comillas 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