Me parece %~dp0
muy útil, y lo uso mucho para hacer que mis archivos por lotes sean más portátiles.
Pero la etiqueta en sí me parece muy críptica ... ¿Qué está ~
haciendo? ¿ dp
Significa unidad y camino? ¿Hace 0
referencia a %0
la ruta al archivo por lotes que incluye el nombre del archivo?
¿O es solo una etiqueta extraña?
También me gustaría saber si es una característica documentada, o algo propenso a ser obsoleto.
batch-file
Sebastián Grignoli
fuente
fuente
%~dp0
. Por lo general, encuentro que los mejores éxitos se refieren al contenido en SO.Respuestas:
Vocación
en la línea de comandos brinda ayuda sobre esta sintaxis (que también se puede usar fuera de FOR, este es solo el lugar donde se puede encontrar ayuda).
Hay diferentes letras que puede usar como
f
"nombre de ruta completo",d
letra de unidad,p
ruta y se pueden combinar.%~
es el comienzo de cada una de esas secuencias y un númeroI
indica que funciona en el parámetro%I
(donde%0
está el nombre completo del archivo por lotes, tal como suponía).fuente
I
. Tengo que usar en0
lugar deI
. No sé si me he perdido algo o lo que sea, pero solo dejándolo saber a la gente.I
es un marcador de posición para el índice variable.0
= el archivo de llamada,1
= argumento # 1,2
= argumento # 2, etc ...(Primero, me gustaría recomendar este útil sitio de referencia para el lote: http://ss64.com/nt/ )
Entonces solo otra explicación útil: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/
Y una referencia más clara desde aquí :
%CmdCmdLine%
devolverá toda la línea de comando como se pasó a CMD.EXE%*
devolverá el resto de la línea de comando comenzando en el primer argumento de la línea de comando (en Windows NT 4,% * también incluye todos los espacios iniciales)%~dn
devolverá la letra de unidad de% n (n puede variar de 0 a 9) si% n es una ruta válida o un nombre de archivo (sin UNC)%~pn
devolverá el directorio de% n si% n es una ruta válida o un nombre de archivo (sin UNC)%~nn
devolverá el nombre de archivo solo de% n si% n es un nombre de archivo válido%~xn
devolverá la extensión de archivo solo de% n si% n es un nombre de archivo válido%~fn
devolverá la ruta completa de% n si% n es un nombre de archivo o directorio válidoAGREGAR 1
Acabo de encontrar una buena referencia para el misterioso
~
operador de tilde.La
%~
cadena se llama operador tilde por ciento . Lo puede encontrar en situaciones como:%~0
.La
:~
cadena se llama operador de tilde de colon . Puedes encontrarlo como%SOME_VAR:~0,-1%
.AGREGAR 2 - 1:12 PM 6/6/2018
%1-%9
consulte los argumentos de la línea de comando. Si son no los valores ruta válida,%~dp1
-%~dp9
se expandirán para el mismo valor que%~dp0
. Pero si son valores de ruta válidos, se expandirán a sus propios valor de controlador / ruta.Por ejemplo: (batch.bat)
Ejecución 1:
Ejecución 2:
fuente
La variable
%0
en un script por lotes se establece con el nombre del archivo por lotes en ejecución.La
~dp
sintaxis especial entre el%
y el0
básicamente dice expandir la variable%0
para mostrar la letra de unidad y la ruta, lo que le da el directorio actual que contiene el archivo por lotes.Ayuda = Enlace
fuente
%0
directamente en el cmd sin guardar un archivo .bat en el disco duro local?% ~ dp0 se expande a la ruta actual del directorio del archivo por lotes en ejecución.
Para obtener una comprensión clara, creemos un archivo por lotes en un directorio.
con contenidos:
Cuando lo ejecute desde el símbolo del sistema, verá este resultado:
fuente
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.Alternativamente, para #oneLinerLovers, como señaló @Omni en los comentarios
cd /d %~dp0
, cambiará tanto la unidad como el directorio :)Espero que esto ayude a alguien.
fuente
cd
tiene un parámetro incorporado que cambiará la unidad y la carpeta:cd /d %~dp0
/d
argumento es útil, pero merece ser publicado como una respuesta alternativa candidata y no como un comentario a esta. Gracias por señalar esto, sin embargo, no lo sabía :)Gran ejemplo del lanzador de shell portátil de Strawberry Perl:
No estoy seguro de lo que el 1 negativo está haciendo allí, ¡pero funciona de maravilla!
fuente
Un ejemplo sería bueno: aquí hay uno trivial
enumera solo las EXTENSIONES de cada archivo en la carpeta actual
para combinaciones de variables más útiles (también enumeradas en la respuesta anterior) desde el indicador CMD execute:
HELP FOR
que contiene este fragmentoLos modificadores se pueden combinar para obtener resultados compuestos:
fuente