Ik vind %~dp0
erg handig, en ik gebruik het veel om mijn batch-bestanden meer draagbaar te maken.
Maar het label zelf lijkt me erg cryptisch... Wat doet de ~
? Betekent dp
station en pad? Verwijst de 0
naar %0
, het pad naar het batch-bestand dat de bestandsnaam bevat?
Of is het gewoon een raar label?
Ik'zou ook graag willen weten of het een gedocumenteerde functie is, of iets dat geneigd is om te worden afgeschreven.
Oproep aan
for /?
in de commandoregel geeft hulp over deze syntaxis (die ook buiten FOR kan worden gebruikt, dit is gewoon de plaats waar hulp kan worden gevonden).
Bovendien is de substitutie van FOR variabele referenties is verbeterd. U kunt nu de volgende optionele syntaxis gebruiken:
%~I - breidt %I uit zonder de aanhalingstekens eromheen (") %~fI - breidt %I uit tot een volledig gekwalificeerde padnaam %~dI - breidt %I uit tot alleen een stationsletter %~pI - breidt %I uit tot alleen een pad %~nI - breidt %I uit tot alleen een bestandsnaam %~xI - breidt %I alleen uit naar een bestandsextensie %~sI - uitgebreid pad bevat alleen korte namen %~aI - breidt %I uit naar bestandsattributen van bestand %~tI - breidt %I uit naar datum/tijd van bestand %~zI - breidt %I uit naar de grootte van het bestand %~$PATH:I - zoekt in de mappen die in de PATH omgevingsvariabele en breidt %I uit naar de volledig gekwalificeerde naam van de eerste gevonden. Als de naam van de omgevingsvariabele niet gedefinieerd of het bestand wordt niet gevonden door de zoekactie, dan breidt deze modifier zich uit naar de lege string
De modifiers kunnen gecombineerd worden om samengestelde resultaten te krijgen:
%~dpI - breidt %I uit tot alleen een stationsletter en pad %~nxI - breidt %I uit tot alleen een bestandsnaam en extensie %~fsI - breidt %I uit tot een volledige padnaam met alleen korte namen %~dp$PATH:I - zoekt in de mappen die in de PATH omgevingsvariabele voor %I en breidt uit naar de stationsletter en pad van de eerst gevonden directory. %~ftzaI - breidt %I uit naar een DIR-achtige uitvoerregel
In de bovenstaande voorbeelden kunnen %I en PATH worden vervangen door andere geldige waarden. De %~ syntaxis wordt afgesloten door een geldige FOR variabele naam. Het kiezen van hoofdletters variabele namen zoals %I maakt het meer leesbaar en voorkomt verwarring met de modifiers, die niet hoofdlettergevoelig zijn. gevoelig zijn.
Er zijn verschillende letters die je kunt gebruiken zoals f
voor "full path name", d
voor drive letter, p
voor path, en ze kunnen gecombineerd worden. %~
is het begin voor elk van deze reeksen en een nummer I
geeft aan dat het werkt op de parameter %I
(waar %0
de volledige naam van het batch-bestand is, net zoals je veronderstelde).
(Eerst wil ik deze nuttige referentie-site voor partijen aanbevelen: http://ss64.com/nt/)
Dan nog maar een andere nuttige uitleg: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/
De %~dp0 Variabele
De %~dp0 (dat is een nul) variabele wanneer er naar verwezen wordt in een Windows batch file zal uitbreiden naar de drive letter en path van die batch bestand.
De variabelen %0-%9 verwijzen naar de command line parameters van het batch bestand. %1-%9 verwijzen naar command line argumenten na de batch file naam. %0 verwijst naar de batch file zelf.
Als u het procent teken (%) volgt met een tilde teken (~), kunt u een modifier(s) voor het parameternummer invoegen om de manier waarop de variabele wordt uitgebreid. De d modifier breidt uit naar de drive letter en de p modifier breidt uit naar het pad van de parameter.
Voorbeeld: Laten we zeggen dat je een directory hebt op C: genaamd bat_files, en in die directory staat een bestand met de naam example.bat. In dit geval, %~dp0 (een combinatie van de d en p modifiers) zal uitbreiden naar C:\bat_files.
Kijk in dit Microsoft artikel voor een volledige uitleg.
Kijk ook eens naar deze forum thread.
En een meer duidelijke verwijzing van hier:
%CmdCmdLine%
geeft de hele opdrachtregel terug zoals die is doorgegeven aan CMD.EXE
%*
geeft de rest van de opdrachtregel terug, beginnend bij het eerste opdrachtregelargument (in Windows NT 4, bevat %* ook alle voorloop spaties)
%~dn
geeft de stationsletter van %n (n kan variëren van 0 tot 9) als %n een geldig pad of een geldige bestandsnaam is (geen UNC)
%~pn
geeft de directory van %n als %n een geldig pad of een geldige bestandsnaam is (geen UNC)
%~nn
geeft alleen de bestandsnaam van %n weer, als %n een geldige bestandsnaam is
%~xn
geeft alleen de bestandsextensie van %n weer, als %n een geldige bestandsnaam is
%~fn
geeft het volledig gekwalificeerde pad van %n als %n een geldige bestandsnaam of map is
Net een goede referentie gevonden voor de mysterieuze ~
tilde operator.
De %~
string wordt procent tilde operator genoemd. Je kunt het vinden in situaties als: %~0
.
De :~
string wordt dubbele punt tilde operator genoemd. Je kunt het vinden als %SOME_VAR:~0,-1%
.
%1-%9
verwijzen naar de commandoregel args. Als ze niet geldige padwaarden zijn, zullen %~dp1
- %~dp9
allemaal uitbreiden naar dezelfde waarde als %~dp0
. Maar als ze wel geldige padwaarden zijn, zullen ze uitbreiden naar hun eigen driver/padwaarde.
Bijvoorbeeld: (batch.bat)
@echo off
@echo ~dp0= %~dp0
@echo ~dp1= %~dp1
@echo ~dp2= %~dp2
@echo on
Run 1:
D:\Workbench>batch arg1 arg2
~dp0= D:\Workbench\
~dp1= D:\Workbench\
~dp2= D:\Workbench\
Run 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
De variabele %0
in een batch-script wordt ingesteld op de naam van het uitvoerende batch-bestand. De ~dp
speciale syntax tussen de %
en de 0
zegt eigenlijk om de variabele %0
uit te breiden om de stationsletter en het pad te tonen, wat je de huidige directory geeft met daarin het batch-bestand!