Wiersz poleceń i PATH
• tech • 644 słowa • 4 minuty czytania
Często pracując z konsolą przydaje się możliwość, aby do najczęściej używanych programów i narzędzi dostawać się poprzez wprowadzenie jego nazwy w wierszu poleceń, niezalenie od bieżącej lokalizacji. Żeby coś takiego działało to dany program musi znajdować się w katalogu, którego ścieżka zawarta jest w zmiennej systemowej PATH
, określającej listę lokalizacji jakie zostaną przeszukane przez interpreter poleceń w poszukiwaniu pliku wykonywalnego.
Jednym z rozwiązań jest trzymanie wszystkich aplikacji i plików wykonywalnych w jednym katalogu, ale to w przypadku systemu Windows jest chybionym pomysłem. Pozostaje zatem korzystanie z PATH
, ale ustawianie i modyfikowanie tej zmiennej systemowej w tradycyjny sposób też jest dość męczące i nieporęczne. Można też wykorzystać polecenie path
lub set
dostępne w linii poleceń.
Idealne wydaje się trzymanie wszystkich ścieżek w jednym pliku i ustawianie zmiennej PATH
na podstawie jego zawartości przy starcie konsoli. Zmiany będą ważne tylko dla danej instancji wiersza poleceń, czasu jego życia, czyli do zakończenia jego działania. Dla mnie jest to idealna opcja, bo właśnie ma to ułatwić pracę z konsolą i uniezależnić różne skrypty i pliki makefile od wszelakich bezwzględnych ścieżek, czy innych sztuczek zaszytych w kodzie.
Warto wspomnieć, że nie należy wszystkiego “pakować” w taki plik ze ścieżkami. Podstawowe lokalizacje odwołujące się do systemowych miejsc i tych gdzie umieszczane są DLL-ki różnych bibliotek warto pozostawić w głównym systemowym miejscu (zmiennej globalnej PATH
), aby były widoczne dla całego systemu, co zapobiegnie różnym problemom ze znalezieniem wymaganych bibliotek przy uruchamianiu programów.
Plik zawierający ścieżki powinien mieć prostą i czytelną budowę. Najlepiej, aby jedna linia odzwierciedlała jedną pozycję (ścieżkę). Puste linie powinny być ignorowane, tak samo te rozpoczynające się od znaku ;
(przydatne dla komentarzy). Przykładowo, zawartość mojego pliku (C:\path.txt
) mogłaby wyglą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
) parsujący ten plik i ustawiający zmienną PATH
jest również bardzo prosty:
@echo off
for /f "eol=; delims=" %%i in (C:\path.txt) do set path=!path!;%%i
echo on
Do poprawnego działania tego skryptu interpreter poleceń musi zostać uruchomiony z przełącznikiem /v:on
włączającym opóźnione rozwijanie zmiennych środowiskowych. Wtedy to ciąg !path!
będzie rozwijany w czasie wykonania do aktualnej wartości zmiennej systemowej path
. Bez tego, przy użyciu %path%
, zmienna ta byłaby rozwinięta tylko raz przy czytaniu instrukcji for
. Efektem byłoby dodanie tylko ostatniej ścieżki z pliku do zmiennej path
.
Warto dodać sobie odpowiedni skrót do QuickLaunch do szybkiego i prostego uruchamiania konsoli wraz z automatycznym uruchomieniem naszego skryptu przy stracie. Elementem docelowym tego skrótu będzie:
%ComSpec% /v:on /k C:\setvar.bat
A w polu “Rozpocznij w” można wpisać ścieżkę lokalizacji jaka zostanie ustawiona jako bieżąca po uruchomieniu konsoli. Można tutaj wykorzystać zmienne systemowe, np. %HOMEDRIVE%%HOMEPATH%
dla ustawienia naszego katalogu domowego.
Innym, bardzo przydatnym ułatwieniem jest dodanie do menu kontekstowego folderu pozycji uruchamiającej wiersz poleceń wraz z ustawieniem jako bieżącego katalogu folderu, na którym rozwinęliśmy menu. Aby dodać taką pozycję do menu wystarczy stworzyć kilka odpowiednich kluczy i wartości w rejestrze dla gałęzi:
HKEY_LOCAL_MACHINE/Software/Classes/Folder/shell
Dokładniej to w podanej gałęzi należy stworzyć nowy klucz o dowolnej nazwie, ja wybrałem “cmd”. Domyślna wartość tego klucza określa nazwę pozycji menu, więc wpisałem “Wiersz poleceń”. Następnie do tego klucza dodajemy pod-klucz o nazwie “command”, którego wartością będzie akcja jaka zostanie wykonana po wybraniu danej pozycji z menu, domyślnie w najprostszym wypadku byłoby to:
cmd.exe /k pushd %L
ale ja chcę wykorzystać mój nowy skrypcik z ustawianiem PATH
, więc wartość tego klucza będzie wyglądać tak:
cmd.exe /v:on /k pushd %L & C:\setvar.bat
Tym sposobem ułatwiłem sobie nieco korzystanie z konsoli. Nie muszę się męczyć z ustawianiem bieżącego katalogu, ani zmiennej PATH
, co czasem przy kilku instancjach i trochę zagnieżdżonych katalogach jest nieco frustrujące ;)
Dla tych wszystkich, którym nie chce się klikać i przepisywać, mogą skorzystać z możliwości importu do rejestru:
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"
Wystarczy zapisać powyższy fragment w pliku o rozszerzeniu reg i odpalić…
Komentarze (0)