tagger tag windows batch-file

tag - ¿Qué significa% ~ d0 en un archivo por lotes de Windows?



tag folders (9)

Estoy mirando un archivo por lotes que define las siguientes variables:

set _SCRIPT_DRIVE=%~d0 set _SCRIPT_PATH=%~p0

  • ¿Qué significa realmente %~d0 o %~p0 ?
  • ¿Hay un conjunto de valores conocidos para cosas como el directorio actual, la unidad, los parámetros de un script?
  • ¿Hay otros atajos similares que podría usar?

Algunas trampas a tener en cuenta:

Si hace doble clic en el archivo %0 lotes %0 estará rodeado de comillas. Por ejemplo, si guarda este archivo como c:/test.bat :

@echo %0 @pause

Al hacer doble clic en él, se abrirá un nuevo símbolo del sistema con salida:

"C:/test.bat"

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 escribe test.bat Enter , la salida de %0 no tendrá comillas porque no escribió comillas:

c:/>test.bat test.bat

Si escribe test Intro , la salida de %0 tampoco tendrá extensión, porque usted no escribió ninguna extensión:

c:/>test test

Lo mismo para tEsT .

c:/>tEsT tEsT

Si escribes "test" , la salida de %0 tendrá comillas (ya que las escribiste) pero sin extensión:

c:/>"test" "test"

Por último, si escribe "C:/test.bat" , la salida sería exactamente como si lo hubiera hecho doble clic:

c:/>"C:/test.bat" "C:/test.bat"

Tenga en cuenta que estos no son todos los valores posibles %0 porque puede llamar al script desde otras carpetas:

c:/some_folder>/../teST.bAt /../teST.bAt

Todos los ejemplos que se muestran arriba también afectarán a %~0 , porque la salida de %~0 es simplemente la salida de %0 menos las comillas (si las hay).



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:

@ECHO off SET "PATH=%~dp0;%PATH%" ECHO %PATH% ECHO. CALL :testargs "these are days" "when the brave endure" GOTO :pauseit :testargs SET ARGS=%~1;%~2;%1;%2 ECHO %ARGS% ECHO. exit /B 0 :pauseit pause


Las variables mágicas % n contienen los argumentos utilizados para invocar el archivo: %0 es la ruta al archivo bat, el primer argumento es %1 , el segundo es %2 y así sucesivamente.

Dado que los argumentos son a menudo rutas de archivos, hay una sintaxis adicional para extraer partes de la ruta. ~d es unidad, ~p es la ruta (sin unidad), ~n es el nombre del archivo. Se pueden combinar para que ~dp sea ​​drive + path.

%~dp0 es, por lo tanto, bastante útil en un bat: es la carpeta en la que reside el archivo bat de ejecución.

También puede obtener otros tipos de metainformación sobre el archivo: ~t es la marca de tiempo, ~z es el tamaño.

Busque here una referencia para todos los comandos de la línea de comandos. Los códigos de tilde-magia se describen en for .


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".


Otra sugerencia que ayudaría mucho es que para configurar el directorio actual en una unidad diferente, primero habría que usar %~d0 , luego cd %~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.


Sí, hay otros accesos directos que puede utilizar que se indican a continuación. En su comando, ~ d0 significaría la letra de unidad del 0º argumento.

~ expands the given variable d gets the drive letter only 0 is the argument you are referencing

Como el argumento 0 es la ruta del script, obtiene la letra de unidad de la ruta para usted. Puedes usar los siguientes atajos también.

%~1 - expands %1 removing any surrounding quotes (") %~f1 - expands %1 to a fully qualified path name %~d1 - expands %1 to a drive letter only %~p1 - expands %1 to a path only %~n1 - expands %1 to a file name only %~x1 - expands %1 to a file extension only %~s1 - expanded path contains short names only %~a1 - expands %1 to file attributes %~t1 - expands %1 to date/time of file %~z1 - expands %1 to size of file %~$PATH:1 - searches the directories listed in the PATH environment variable and expands %1 to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string %~dp1 - expands %1 to a drive letter and path only %~nx1 - expands %1 to a file name and extension only %~dp$PATH:1 - searches the directories listed in the PATH environment variable for %1 and expands to the drive letter and path of the first one found. %~ftza1 - expands %1 to a DIR like output line

Esto también se puede encontrar directamente en el símbolo del sistema cuando ejecuta CALL /? o por /?


Son sustituciones variables mejoradas. Modifican las variables% N utilizadas en los archivos por lotes. Bastante útil si te gusta la programación por lotes en Windows.

%~I - expands %I removing any surrounding quotes ("") %~fI - expands %I to a fully qualified path name %~dI - expands %I to a drive letter only %~pI - expands %I to a path only %~nI - expands %I to a file name only %~xI - expands %I to a file extension only %~sI - expanded path contains short names only %~aI - expands %I to file attributes of file %~tI - expands %I to date/time of file %~zI - expands %I to size of file %~$PATH:I - searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string

Puedes encontrar lo anterior ejecutando FOR /? .


%~d0 le da la letra de unidad del argumento 0 (el nombre del script), %~p0 la ruta.