Wiersz po­le­ceń i PATH

• tech • 644 słowa • 4 mi­nu­ty czy­ta­nia

Czę­sto pra­cu­jąc z kon­so­lą przy­da­je się moż­li­wość, aby do naj­czę­ściej uży­wa­nych pro­gra­mów i na­rzę­dzi do­sta­wać się po­przez wpro­wa­dze­nie jego nazwy w wier­szu po­le­ceń, nie­za­le­nie od bie­żą­cej lo­ka­li­za­cji. Żeby coś ta­kie­go dzia­ła­ło to dany pro­gram musi znaj­do­wać się w ka­ta­lo­gu, któ­re­go ścież­ka za­war­ta jest w zmien­nej sys­te­mo­wej PATH, okre­śla­ją­cej listę lo­ka­li­za­cji jakie zo­sta­ną prze­szu­ka­ne przez in­ter­pre­ter po­le­ceń w po­szu­ki­wa­niu pliku wy­ko­ny­wal­ne­go.

Jed­nym z roz­wią­zań jest trzy­ma­nie wszyst­kich apli­ka­cji i pli­ków wy­ko­ny­wal­nych w jed­nym ka­ta­lo­gu, ale to w przy­pad­ku sys­te­mu Win­dows jest chy­bio­nym po­my­słem. Po­zo­sta­je zatem ko­rzy­sta­nie z PATH, ale usta­wia­nie i mo­dy­fi­ko­wa­nie tej zmien­nej sys­te­mo­wej w tra­dy­cyj­ny spo­sób też jest dość mę­czą­ce i nie­po­ręcz­ne. Można też wy­ko­rzy­stać po­le­ce­nie path lub set do­stęp­ne w linii po­le­ceń.

Ide­al­ne wy­da­je się trzy­ma­nie wszyst­kich ście­żek w jed­nym pliku i usta­wia­nie zmien­nej PATH na pod­sta­wie jego za­war­to­ści przy star­cie kon­so­li. Zmia­ny będą ważne tylko dla danej in­stan­cji wier­sza po­le­ceń, czasu jego życia, czyli do za­koń­cze­nia jego dzia­ła­nia. Dla mnie jest to ide­al­na opcja, bo wła­śnie ma to uła­twić pracę z kon­so­lą i unie­za­leż­nić różne skryp­ty i pliki ma­ke­fi­le od wsze­la­kich bez­względ­nych ście­żek, czy in­nych sztu­czek za­szy­tych w ko­dzie.

Warto wspo­mnieć, że nie na­le­ży wszyst­kie­go “pa­ko­wać” w taki plik ze ścież­ka­mi. Pod­sta­wo­we lo­ka­li­za­cje od­wo­łu­ją­ce się do sys­te­mo­wych miejsc i tych gdzie umiesz­cza­ne są DLL-​ki róż­nych bi­blio­tek warto po­zo­sta­wić w głów­nym sys­te­mo­wym miej­scu (zmien­nej glo­bal­nej PATH), aby były wi­docz­ne dla ca­łe­go sys­te­mu, co za­po­bie­gnie róż­nym pro­ble­mom ze zna­le­zie­niem wy­ma­ga­nych bi­blio­tek przy uru­cha­mia­niu pro­gra­mów.

Plik za­wie­ra­ją­cy ścież­ki po­wi­nien mieć pro­stą i czy­tel­ną bu­do­wę. Naj­le­piej, aby jedna linia od­zwier­cie­dla­ła jedną po­zy­cję (ścież­kę). Puste linie po­win­ny być igno­ro­wa­ne, tak samo te roz­po­czy­na­ją­ce się od znaku ; (przy­dat­ne dla ko­men­ta­rzy). Przy­kła­do­wo, za­war­tość mo­je­go pliku (C:\path.txt) mo­gła­by wy­glą­dać tak:

C:\Perl64\bin
C:\Perl64\site\bin

; toolsy
C:\tools\sed
C:\tools\ZIP

C:\Program Files (x86)\Bakefile
C:\Program Files (x86)\wxFormBuilder

; SVN/CVS
C:\Program Files\SlikSvn\bin\
C:\Program Files\TortoiseSVN\bin
C:\Program Files (x86)\CVSNT

Skrypt (C:\setvar.bat) par­su­ją­cy ten plik i usta­wia­ją­cy zmien­ną PATH jest rów­nież bar­dzo pro­sty:

@echo off
for /f "eol=; delims=" %%i in (C:\path.txt) do set path=!path!;%%i
echo on

Do po­praw­ne­go dzia­ła­nia tego skryp­tu in­ter­pre­ter po­le­ceń musi zo­stać uru­cho­mio­ny z prze­łącz­ni­kiem /v:on włą­cza­ją­cym opóź­nio­ne roz­wi­ja­nie zmien­nych śro­do­wi­sko­wych. Wtedy to ciąg !path! bę­dzie roz­wi­ja­ny w cza­sie wy­ko­na­nia do ak­tu­al­nej war­to­ści zmien­nej sys­te­mo­wej path. Bez tego, przy uży­ciu %path%, zmien­na ta by­ła­by roz­wi­nię­ta tylko raz przy czy­ta­niu in­struk­cji for. Efek­tem by­ło­by do­da­nie tylko ostat­niej ścież­ki z pliku do zmien­nej path.

Warto dodać sobie od­po­wied­ni skrót do QuickLaunch do szyb­kie­go i pro­ste­go uru­cha­mia­nia kon­so­li wraz z au­to­ma­tycz­nym uru­cho­mie­niem na­sze­go skryp­tu przy stra­cie. Ele­men­tem do­ce­lo­wym tego skró­tu bę­dzie:

%ComSpec% /v:on /k C:\setvar.bat

A w polu “Roz­pocz­nij w” można wpi­sać ścież­kę lo­ka­li­za­cji jaka zo­sta­nie usta­wio­na jako bie­żą­ca po uru­cho­mie­niu kon­so­li. Można tutaj wy­ko­rzy­stać zmien­ne sys­te­mo­we, np. %HOMEDRIVE%%HOMEPATH% dla usta­wie­nia na­sze­go ka­ta­lo­gu do­mo­we­go.

Innym, bar­dzo przy­dat­nym uła­twie­niem jest do­da­nie do menu kon­tek­sto­we­go fol­de­ru po­zy­cji uru­cha­mia­ją­cej wiersz po­le­ceń wraz z usta­wie­niem jako bie­żą­ce­go ka­ta­lo­gu fol­de­ru, na któ­rym roz­wi­nę­li­śmy menu. Aby dodać taką po­zy­cję do menu wy­star­czy stwo­rzyć kilka od­po­wied­nich klu­czy i war­to­ści w re­je­strze dla ga­łę­zi:

HKEY_LOCAL_MACHINE/Software/Classes/Folder/shell

Do­kład­niej to w po­da­nej ga­łę­zi na­le­ży stwo­rzyć nowy klucz o do­wol­nej na­zwie, ja wy­bra­łem “cmd”. Do­myśl­na war­tość tego klu­cza okre­śla nazwę po­zy­cji menu, więc wpi­sa­łem “Wiersz po­le­ceń”. Na­stęp­nie do tego klu­cza do­da­je­my pod-​klucz o na­zwie “com­mand”, któ­re­go war­to­ścią bę­dzie akcja jaka zo­sta­nie wy­ko­na­na po wy­bra­niu danej po­zy­cji z menu, do­myśl­nie w naj­prost­szym wy­pad­ku by­ło­by to:

cmd.exe /k pushd %L

ale ja chcę wy­ko­rzy­stać mój nowy skryp­cik z usta­wia­niem PATH, więc war­tość tego klu­cza bę­dzie wy­glą­dać tak:

cmd.exe /v:on /k pushd %L & C:\setvar.bat

Tym spo­so­bem uła­twi­łem sobie nieco ko­rzy­sta­nie z kon­so­li. Nie muszę się mę­czyć z usta­wia­niem bie­żą­ce­go ka­ta­lo­gu, ani zmien­nej PATH, co cza­sem przy kilku in­stan­cjach i tro­chę za­gnież­dżo­nych ka­ta­lo­gach jest nieco fru­stru­ją­ce ;)

Dla tych wszyst­kich, któ­rym nie chce się kli­kać i prze­pi­sy­wać, mogą sko­rzy­stać z moż­li­wo­ści im­por­tu do re­je­stru:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\cmd]
@="Wiersz poleceń"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\cmd\command]
@="cmd.exe /v:on /k pushd %L & C:\\setvar.bat"

Wy­star­czy za­pi­sać po­wyż­szy frag­ment w pliku o roz­sze­rze­niu reg i od­pa­lić…

Ko­men­ta­rze (0)

Dodaj ko­men­tarz

/do­zwo­lo­ny mark­down/

/nie zo­sta­nie opu­bli­ko­wa­ny/