Jeg synes %~dp0
er veldig nyttig, og jeg bruker det mye for å gjøre batchfilene mine mer portable.
Men etiketten i seg selv virker veldig kryptisk for meg ... Hva gjør ~
? Betyr dp
stasjon og sti? Refererer 0
til %0
, banen til batchfilen som inneholder filnavnet?
Eller er det bare en merkelig etikett?
Jeg vil også gjerne vite om det er en dokumentert funksjon, eller noe som er tilbøyelig til å bli utdatert.
Innkalling
for /?
i kommandolinjen gir hjelp om denne syntaksen (som også kan brukes utenfor FOR, dette er bare stedet der du finner hjelp).
I tillegg er substitusjon av FOR variabelreferanser har blitt forbedret. Du kan nå bruke følgende valgfri syntaks:
%~I - utvider %I og fjerner eventuelle anførselstegn rundt (") %~fI - utvider %I til et fullt kvalifisert navn på banen. %~dI - utvider %I til bare en stasjonsbokstav %~pI - utvider %I bare til en bane %~nI - utvider %I til bare et filnavn %~xI - utvider %I kun til en filtype %~sI - utvidet bane inneholder bare korte navn %~aI - utvider %I til filattributter for filen %~tI - utvider %I til dato/tid for filen %~zI - utvider %I til filens størrelse %~$PATH:I - søker i katalogene som er oppført i miljøvariabelen PATH miljøvariabelen og utvider %I til det fullt kvalifiserte navnet på den første som blir funnet. Hvis navnet på miljøvariabelen ikke er ikke er definert eller filen ikke blir funnet av søket, utvides denne modifikatoren til en tom streng
Modifikatorene kan kombineres for å få sammensatte resultater:
%~dpI - utvider kun %I til en stasjonsbokstav og bane %~nxI - utvider kun %I til et filnavn og en filutvidelse %~fsI - utvider %I til et fullt banenavn med bare korte navn %~dp$PATH:I - søker i katalogene som er oppført i STIEN miljøvariabelen for %I og ekspanderer til den stasjonsbokstaven og banen til den første som blir funnet. %~ftzaI - utvider %I til en DIR-lignende utgangslinje
I eksemplene ovenfor kan %I og PATH kan erstattes av andre gyldige verdier. %~-syntaksen avsluttes med et gyldig FOR variabelnavn. Valg av store bokstaver variabelnavn som %I gjør det lettere å lese og unngår lesbare og unngår forvirring med modifikatorene modifikatorer, som ikke er følsomme for store og små bokstaver. sensitive.
Det er forskjellige bokstaver du kan bruke, for eksempel "f" for "fullt banenavn", "d" for stasjonsbokstav, "p" for bane, og de kan kombineres. %~
er begynnelsen for hver av disse sekvensene, og et tall I
angir at det fungerer på parameteren %I
(der %0
er det fullstendige navnet på batchfilen, akkurat som du antok).
(Først vil jeg anbefale dette nyttige referansenettstedet for batch: http://ss64.com/nt/)
Så bare en annen nyttig forklaring: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/
Variabelen % ~ dp0
Variabelen %~dp0 (det er en null) når den refereres til i en Windows batchfil vil utvides til d-stasjonsbokstaven og p-banen til den batchen filen.
Variablene %0-%9 refererer til kommandolinjeparametrene i batchfilen. filen. %1-%9 refererer til kommandolinjeargumenter etter batchfilnavnet. %0 refererer til selve batchfilen.
Hvis du følger prosenttegnet (%) med et tilde-tegn (~), kan du sette inn en modifikator(er) før parameternummeret for å endre den måten variabelen utvides på. Modifikatoren d utvider til stasjonen bokstav og p-modifikatoren ekspanderer til banen til parameteren.
Eksempel: La oss si at du har en katalog på C: kalt bat_files, og i den katalogen er en fil som heter example.bat. I dette tilfellet vil %~dp0 (som kombinerer modifikatorene d og p) utvides til C:\bat_files.
Sjekk ut denne Microsoft-artikkelen for en fullstendig forklaring.
Sjekk også ut denne forumtråden.
Og en mer tydelig referanse fra her:
%CmdCmdLine%
vil returnere hele kommandolinjen som sendt til CMD.EXE
%*
vil returnere resten av kommandolinjen fra og med det første kommandolinjeargumentet (i Windows NT 4 inkluderer %* også alle ledende mellomrom).
%~dn
vil returnere stasjonsbokstaven til %n (n kan variere fra 0 til 9) hvis %n er en gyldig bane eller filnavn (ingen UNC).
%~pn
vil returnere katalogen til %n hvis %n er en gyldig bane eller filnavn (ingen UNC).
%~nn
returnerer bare filnavnet til %n hvis %n er et gyldig filnavn.
%~xn
returnerer bare filtypen til %n hvis %n er et gyldig filnavn.
%~fn
vil returnere den fullt kvalifiserte banen til %n hvis %n er et gyldig filnavn eller en gyldig katalog.
Fant nettopp en god referanse for den mysteriøse ~
tilde-operatoren.
Strengen %~
kalles prosent tilde operatør. Du kan finne den i situasjoner som: %~0
.
Strengen :~
kalles kolon tilde-operatoren. Du finner den som %SOME_VAR:~0,-1%
.
%1-%9
referer til kommandolinjen args. Hvis de ikke er gyldige baneverdier, vil %~dp1
- %~dp9
alle utvides til samme verdi som %~dp0
. Men hvis de er gyldige baneverdier, vil de utvides til deres egen driver/baneverdi.
For eksempel (batch.bat)
@echo off
@echo ~dp0= %~dp0
@echo ~dp1= %~dp1
@echo ~dp2= %~dp2
@echo on
Kjør 1:
D:\Workbench>batch arg1 arg2
~dp0= D:\Workbench\
~dp1= D:\Workbench\
~dp2= D:\Workbench\
Kjør 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
Variabelen %0
i et batchskript er satt til navnet på den kjørende batchfilen. Den spesielle syntaksen ~dp
mellom %
og 0
sier i utgangspunktet at variabelen %0
skal utvides for å vise stasjonsbokstaven og banen, som gir deg den gjeldende katalogen som inneholder batchfilen!