Me parece %~dp0muy ú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? ¿ dpSignifica unidad y camino? ¿Hace 0referencia a %0la 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",dletra de unidad,pruta y se pueden combinar.%~es el comienzo de cada una de esas secuencias y un númeroIindica que funciona en el parámetro%I(donde%0está el nombre completo del archivo por lotes, tal como suponía).fuente
I. Tengo que usar en0lugar deI. No sé si me he perdido algo o lo que sea, pero solo dejándolo saber a la gente.Ies 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)%~dndevolverá 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)%~pndevolverá el directorio de% n si% n es una ruta válida o un nombre de archivo (sin UNC)%~nndevolverá el nombre de archivo solo de% n si% n es un nombre de archivo válido%~xndevolverá la extensión de archivo solo de% n si% n es un nombre de archivo válido%~fndevolverá 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-%9consulte los argumentos de la línea de comando. Si son no los valores ruta válida,%~dp1-%~dp9se 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
%0en un script por lotes se establece con el nombre del archivo por lotes en ejecución.La
~dpsintaxis especial entre el%y el0básicamente dice expandir la variable%0para mostrar la letra de unidad y la ruta, lo que le da el directorio actual que contiene el archivo por lotes.Ayuda = Enlace
fuente
%0directamente 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
%~d0en 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
cdtiene un parámetro incorporado que cambiará la unidad y la carpeta:cd /d %~dp0/dargumento 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 FORque contiene este fragmentoLos modificadores se pueden combinar para obtener resultados compuestos:
fuente