Ką reiškia %~dp0 ir kaip jis veikia?

Manau, kad %~dp0 yra labai naudingas, ir dažnai jį naudoju, kad mano paketiniai failai būtų lengviau perkeliami.

Tačiau pati etiketė man atrodo labai mįslinga... Ką daro ~~? Ar dp reiškia diską ir kelią? Ar 0 reiškia %0 - paketinio failo kelią, kuriame yra failo pavadinimas?

O gal tai tiesiog keista etiketė?

Taip pat norėčiau sužinoti, ar tai dokumentais patvirtinta funkcija, ar kažkas, kas linkęs būti atšauktas.

Sprendimas

Skambutis

for /?

komandinėje eilutėje pateikiama pagalba apie šią sintaksę (ją galima naudoti ir už FOR ribų, tai tik vieta, kur galima rasti pagalbą).

Be to, pakeitus FOR kintamųjų nuorodų keitimas buvo patobulintas. Dabar galite naudoti šiuos pasirenkamuosius sintaksę:

%~I - išplečia %I, pašalindamas visas aplink esančias kabutes (") %~fI - išplečia %I iki visiškai kvalifikuoto kelio vardo %~dI - išplečia %I tik iki disko raidės %~pI - išplečia %I tik į kelią %~nI - išplečia %I tik į failo vardą %~xI - išplečia %I tik į failo plėtinį %~sI - išplėstame kelyje yra tik trumpieji vardai %~aI - išplečia %I į failo atributus %~tI - išplečia %I į failo datą ir laiką %~zI - išplečia %I į failo dydį %~~$PATH:I - ieško PATH sąraše išvardytuose kataloguose aplinkos kintamajame ir išplečia %I į pirmojo surasto vardą. Jei aplinkos kintamojo vardas nėra apibrėžtas arba failas nerandamas paieška, tada šis modifikatorius išplečia į tuščią eilutę

Modifikatorius galima sujungti ir gauti sudėtinių rezultatų:

%~dpI - išplečia %I tik iki disko raidės ir kelio %~nxI - išplečia %I tik į failo pavadinimą ir plėtinį %~fsI - išplečia %I į visą kelio pavadinimą tik su trumpaisiais vardais %~dp$PATH:I - atlieka paiešką PATH sąraše išvardytuose kataloguose aplinkos kintamajame %I ir išplečia į pirmojo rasto disko raidę ir kelią. %~ftzaI - išplečia %I į DIR išvesties eilutę

Pateiktuose pavyzdžiuose %I ir PATH gali pakeisti kitomis galiojančiomis reikšmėmis. %~ sintaksė baigiama galiojančia FOR kintamojo vardu. Didžiųjų raidžių rinkimas kintamųjų vardus, pavyzdžiui, %I, todėl yra daugiau skaitomas ir išvengiama painiavos su modifikatoriais, kurie nėra rašomi mažosiomis raidėmis jautrūs.

Galima naudoti įvairias raides, pavyzdžiui, f - "pilnas kelio pavadinimas", d - disko raidė, p - kelias, ir jas galima derinti. %~ yra kiekvienos iš šių sekų pradžia, o skaičius I reiškia, kad ji veikia parametrui %I (kur %0 yra pilnas partijos failo pavadinimas, kaip ir manėte).

Komentarai (5)

(Pirmiausia norėčiau rekomenduoti šią naudingą nuorodų svetainę, skirtą partijai: http://ss64.com/nt/)

Tada tik dar vienas naudingas paaiškinimas: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/

Kintamasis %~dp0

Kintamasis %~dp0 (tai nulis), kai į jį daroma nuoroda "Windows" sistemoje paketiniame faile, išsiplės iki tos partijos d disko raidės ir pato failą.

Kintamieji %0-%9 nurodo paketinės programos komandinės eilutės parametrus. failą. %1-%9 reiškia komandinės eilutės argumentus po partijos failo pavadinimo. %0 reiškia patį paketinį failą.

Jei po procento ženklo (%) įrašomas tilde ženklas (~), prieš parametro numerį galite įterpti modifikatorių (-ius), kad pakeistumėte kintamojo išskleidimo būdą. Modifikatorius d išplečia į diską raidę, o modifikatorius p - į parametro kelią.

Pavyzdys: Tarkime, kad C: kataloge yra katalogas bat_files ir tame kataloge yra failas, pavadintas example.bat. Šiuo atveju %~dp0 (derinant d ir p modifikatorius) išsiplės į C:\bat_files.

Išsamų paaiškinimą rasite šiame "Microsoft" straipsnyje.

Taip pat peržiūrėkite šį forumo temą.

Ir aiškesnę nuorodą čia:

  • %CmdCmdLine% grąžins visą komandų eilutę, perduotą CMD.EXE

  • %* grąžins likusią komandos eilutės dalį, pradedant pirmuoju komandos eilutės argumentu (Windows NT 4 sistemoje %* taip pat apima visus pradinius tarpus)

  • %~dn grąžins %n disko raidę (n gali būti nuo 0 iki 9), jei %n yra galiojantis kelias arba failo vardas (be UNC)

  • %~pn grąžins %n katalogą, jei %n yra galiojantis kelias arba failo vardas (ne UNC)

  • %~nn grąžins tik %n failo vardą, jei %n yra galiojantis failo vardas

  • %~xn grąžins tik %n failo plėtinį, jei %n yra galiojantis failo vardas

  • %~fn grąžins visiškai kvalifikuotą %n kelią, jei %n yra galiojantis failo vardas arba katalogas

ADD 1

Ką tik radau gerą nuorodą apie paslaptingąjį ~~ tilde operatorių.

%~ eilutė vadinama procentų tilde operatoriumi. Jį galite rasti tokiose situacijose, pvz: %~0.

:~ eilutė vadinama dvitaškio tilde operatoriumi. Jį galite rasti taip: `%%SOME_VAR:~0,-1%``.

PRIDĖTI 2 - 13:12 VAL. 7/6/2018

%1-%9 reiškia komandinės eilutės argumentus. Jei jie yra ne galiojančios kelio reikšmės, %~dp1 - %~dp9 išsiplės į tą pačią reikšmę kaip ir %~dp0. Tačiau jei jie yra galiojančios kelio reikšmės, jie išsiplės į savo tvarkyklės/kelio reikšmę.

Pavyzdžiui: (batch.bat)

@echo off
@echo ~dp0= %~dp0
@echo ~dp1= %~dp1
@echo ~dp2= %~dp2
@echo on

Vykdyti 1:

D:\Workbench>batch arg1 arg2

~dp0= D:\Workbench\
~dp1= D:\Workbench\
~dp2= D:\Workbench\

2 rungtis:

D:\Workbench>batch c:\123\a.exe e:\abc\b.exe

~dp0= D:\Workbench\
~dp1= c:\123\
~dp2= e:\abc\
Komentarai (3)

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

Kintamasis %0 paketiniame scenarijuje nustatomas kaip vykdomo paketinio failo pavadinimas. Specialioji sintaksė ~dp tarp % ir 0 iš esmės sako, kad kintamąjį %0 reikia išplėsti ir parodyti disko raidę ir kelią, todėl gaunamas dabartinis katalogas, kuriame yra paketinis failas!

Komentarai (2)