Trovo %~dp0
molto utile, e lo uso molto per rendere i miei file batch più portatili.
Ma l'etichetta stessa mi sembra molto criptica... Cosa fa il ~
? Il dp
significa unità e percorso? Il 0
si riferisce a %0
, il percorso del file batch che include il nome del file?
O è solo una strana etichetta?
Vorrei anche sapere se è una caratteristica documentata, o qualcosa che tende ad essere deprecato.
Chiamare
for /?
nella riga di comando dà un aiuto su questa sintassi (che può essere usata anche al di fuori di FOR, questo è solo il posto dove si può trovare l'aiuto).
Inoltre, la sostituzione dei riferimenti alle variabili FOR è stata migliorata. Ora puoi usare la seguente
sintassi:
%~I - espande %I rimuovendo qualsiasi apice circostante (") %~fI - espande %I a un nome di percorso completamente qualificato %~dI - espande %I solo a una lettera di unità %~pI - espande %I solo ad un percorso %~nI - espande %I solo ad un nome di file %~xI - espande %I solo all'estensione di un file %~sI - il percorso espanso contiene solo nomi brevi %~aI - espande %I agli attributi del file %~tI - espande %I a data/ora del file %~zI - espande %I alla dimensione del file %~$PATH:I - cerca le directory elencate nella variabile d'ambiente PATH e espande %I al nome pienamente qualificato della prima trovata. Se il nome della variabile d'ambiente non è definito o il file non viene trovato dalla ricerca, allora questo modificatore si espande alla stringa vuota
I modificatori possono essere combinati per ottenere risultati composti:
%~dpI - espande %I solo a una lettera di unità e a un percorso %~nxI - espande %I solo al nome e all'estensione di un file %~fsI - espande %I ad un nome di percorso completo solo con nomi brevi %~dp$PATH:I - cerca le directory elencate nella variabile d'ambiente PATH per %I ed espande alla lettera di unità e percorso della prima trovata. %~ftzaI - espande %I in una linea di output simile a DIR
Negli esempi precedenti %I e PATH possono essere sostituiti da altri valori validi. La sintassi %~ termina con un valido nome di variabile FOR. Scegliere le maiuscole nomi di variabili come %I lo rende più leggibile ed evita la confusione con i modificatori, che non sono sensibili alle maiuscole sensibili alle maiuscole e alle minuscole.
Ci sono diverse lettere che puoi usare come f
per "nome completo del percorso", d
per lettera di unità, p
per percorso, e possono essere combinate. %~
è l'inizio per ciascuna di queste sequenze e un numero I
denota che lavora sul parametro %I
(dove %0
è il nome completo del file batch, proprio come hai supposto).
(In primo luogo, vorrei raccomandare questo sito di riferimento utile per il lotto: http://ss64.com/nt/)
Poi solo un'altra utile spiegazione: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/
La variabile %~dp0
La variabile %~dp0 (che è uno zero) quando si fa riferimento all'interno di un file batch di Windows file batch si espanderà alla lettera drive e path di quel file batch file.
Le variabili %0-%9 si riferiscono ai parametri della linea di comando del file batch file. %1-%9 si riferiscono agli argomenti della riga di comando dopo il nome del file batch. %0 si riferisce al file batch stesso.
Se segui il carattere percentuale (%) con un carattere tilde (~), potete inserire un modificatore prima del numero del parametro per alterare il modo in cui la variabile viene espansa. Il modificatore d si espande alla lettera e il modificatore p si espande al percorso del parametro.
Esempio: Diciamo che avete 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à a C:-bat_files.
Controlla questo articolo di Microsoft per una spiegazione completa.
Inoltre, controlla questo thread del forum.
E un riferimento più chiaro da qui:
%CmdCmdLine%
restituirà l'intera linea di comando come passata a CMD.EXE
%*
restituirà il resto della linea di comando a partire dal primo argomento della linea 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 un nome di file valido (no UNC)
%~pn
restituirà la directory di %n se %n è un percorso o un nome di file valido (no UNC)
%~nn
restituisce solo il nome del file di %n se %n è un nome di file valido
%~xn
restituirà solo l'estensione del file di %n se %n è un nome di file valido
%~fn
restituirà il percorso completamente qualificato di %n se %n è un nome di file o una directory valida
Ho appena trovato qualche buon riferimento per il misterioso operatore tilde ~
.
La stringa %~
è chiamata operatore percent tilde. Puoi trovarlo in situazioni come: %~0
.
La stringa :~
è chiamata operatore colon tilde. Puoi trovarlo come %SOME_VAR:~0,-1%
.
%1-%9
si riferiscono agli argomenti della riga di comando. Se sono non valori di percorso validi, %~dp1
- %~dp9
si espanderanno tutti allo stesso valore di %~dp0
. Ma se sono valori di percorso validi, si espanderanno al suo valore di driver/path.
Per esempio: (batch.bat)
@echo off
@echo ~dp0= %~dp0
@echo ~dp1= %~dp1
@echo ~dp2= %~dp2
@echo on
Esegui 1:
D:\Workbench>batch arg1 arg2
~dp0= D:\Workbench\
~dp1= D:\Workbench\
~dp2= D:\Workbench\
Esecuzione 2:
D:\Workbench>batch c:\123\a.exe e:\abc\b.exe
~dp0= D:\Workbench\
~dp1= c:\123\
~dp2= e:\abc\
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true
La variabile %0
in uno script batch è impostata sul nome del file batch in esecuzione. La sintassi speciale ~dp
tra il %
e il 0
dice fondamentalmente di espandere la variabile %0
per mostrare la lettera dell'unità e il percorso, che ti dà la directory corrente contenente il file batch!