[batch-file] Cosa significa% ~ dp0 e come funziona?



2 Answers

(Innanzitutto, mi piacerebbe raccomandare questo utile sito di riferimento per il batch: http://ss64.com/nt/ )

Quindi solo un'altra utile spiegazione: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/

La variabile% ~ dp0

La variabile% ~ dp0 (che equivale a zero) quando si fa riferimento a un file batch di Windows si espanderà alla lettera d rive e al file di quel file batch.

Le variabili% 0-% 9 si riferiscono ai parametri della riga di comando del file batch. % 1-% 9 si riferiscono agli argomenti della riga di comando dopo il nome del file batch. % 0 si riferisce al file batch stesso.

Se si segue il carattere percentuale (%) con un carattere tilde (~), è possibile inserire un modificatore (s) prima del numero del parametro per modificare il modo in cui la variabile viene espansa. Il modificatore d si espande alla lettera dell'unità e il modificatore p si espande nel percorso del parametro.

Esempio: supponiamo tu abbia una directory su C: chiamata bat_files, e in quella directory c'è un file chiamato example.bat. In questo caso,% ~ dp0 (combinando i modificatori d e p) si espanderà in C: \ bat_files.

Dai un'occhiata a questo articolo di Microsoft per una spiegazione completa.

Inoltre, controlla questa discussione sul forum .

E un riferimento più chiaro da here :

  • %CmdCmdLine% restituirà l'intera riga di comando passata a CMD.EXE

  • %* restituirà il resto della riga di comando a partire dal primo argomento della riga di comando (in Windows NT 4,% * include anche tutti gli spazi iniziali)

  • %~dn restituirà la lettera di unità di% n (n può variare da 0 a 9) se% n è un percorso o nome file valido (no UNC)

  • %~pn restituirà la directory di% n se% n è un percorso o nome file valido (no UNC)

  • %~nn restituirà solo il nome file di% n se% n è un nome file valido

  • %~xn restituirà solo l'estensione del file di% n se% n è un nome file valido

  • %~fn restituirà il percorso completo di% n se% n è un nome file o directory valido

Question

%~dp0 molto utile %~dp0 , e lo uso molto per rendere i miei file batch più portabili.

Ma l'etichetta stessa sembra molto criptica per me ... cosa sta facendo? dp significa drive e path? lo 0 riferimento a %0 , il percorso del file batch che include il nome del file?

O è solo un'etichetta strana?

Mi piacerebbe anche sapere se si tratta di una funzionalità documentata, o qualcosa che tende a essere deprecato.




Un grande esempio dal launcher di shell portatile di Strawberry Perl:

set drive=%~dp0
set drivep=%drive%
if #%drive:~-1%# == #\# set drivep=%drive:~0,-1%

set PATH=%drivep%\perl\site\bin;%drivep%\perl\bin;%drivep%\c\bin;%PATH%

non sono sicuro di quello che il negativo 1 sta facendo lì da solo, ma funziona benissimo!




Un altro suggerimento che sarebbe di grande aiuto è che per impostare la directory corrente su un'unità diversa si dovrebbe usare %~d0 prima, quindi cd %~dp0 . Ciò cambierà la directory nell'unità del file batch, quindi cambierà nella sua cartella.

In alternativa, per #oneLinerLovers, come @Omni ha evidenziato nei commenti cd /d %~dp0 cambierà sia l'unità che la directory :)

Spero che questo aiuti qualcuno.




Related