Manager urządzeń
Można odpalić z cmd przez komenę devmgmt.mscPobranie do zmiennej bieżącego katalogu
Przypadkowo zdarzyło mi się że musiałem napisać prosty plik bat. Nie przepadam za skryptami w batch-ach... ale gdy trzeba trudno.Chciałem sprawdzić bieżący katalog.
Postąpiłem w sposób analogiczny jak dla Linux.
Pewnie jest to jakaś zmienna systemowa.
Okazało się że to nie tak samo...
W przypadku Linux można to sprawdzić przeglądając zawartość zmiennych komendą set
Wartość mamy w PWD
set |less set |grep PWD=Chciałem to sprawdzić dla Windows. I co? Okazuje się że szukam a tu nie ma!
set |more set >c:\testMożna sobie taką zmienną spreparować. Komenda cd zwraca tę wartość.
set PWD="%cd%" echo %PWD%
... i gotowe
Źródło http://stackoverflow.com/questions/6789491/batch-script-to-set-a-variable-with-the-current-path-location
Szukanie pliku który się uruchomił
I znów pracuję w Windows.
Odpalam konsole cmd. Wydaje polecenie np: java i wykonuje.
Działa... ale czemu?
Może na początku zaznaczę że polecenia wydaje bez podania pełnej ścieżki. Wygląda tak jak komenda systemu. Niektóre polecenia się wywołują - ot tak - bez podania pełnej ścieżki.
Gdyby się zastanowić, to tak do końca nie wiem co się uruchomiło.
Sprawdzając managera zadań, pewnie zobaczę pełną ścieżkę, ale już po uruchomieniu.
A jak zobaczyć co system wybierze zanim to wykonam?
Wracając do teori w systemie Windows programy są odnajdywane na podstawie ścieżki PATH. Skąd tak na prawdę ten program jest uruchamiany? Jak znasz scieżkę PATH możesz spróbować to prześledzić, ale czy to proste i komu by się to chciało robić.
Okazuje się że można zobaczyć co właściwie system znajduje gdy się poda polecenie - służy do tego where.
where java C:\Windows\System32\java.exe D:\java\jdk\jdk1.6\bin\java.exeTeraz już wiem.... wykona C:\Windows\System32\java.exe bo jest pierwsze na liście
W przypadku Linux jest whereis. Wydaje się że where z Windows to właśnie jego odpowiednik.
Rozszerzone polecenia cmd
Chciałem wykonać prosty skrypt do odpalania programu java. Jestem w katalogu X, wywołuje skrypt program.bat z podaniem bezwzględnej ścieżki katalogu Y. W ścieżce Y znajdują się wymagane jary. Trzeba je dodać do wywołania jar-a. Okazuje się że zrobiłem sobie zagadkę.
c:\X> c:\Y\program.batKod program.bat jest prosty:
java -cp .\lib1.jar Class1
Program przy takim wywołaniu się wykłada. Wina to podanie bezwzględnej ścieżki. Ścieżka reprezentowana przez . to c:\X a tu nie ma lib1.jar.
Jak zatem to zrobić aby działało również dla takiego przypadku?
Nie chce przecież w skrypcie mieć zapisanych ścieżek na sztywno!
Czytam więc reference dla cmd. Zabrałem się do tego po lekturze linka poniżej. Należy zwrócić uwagę że I to numer od 0 - n
Jak zatem to zrobić aby działało również dla takiego przypadku?
Nie chce przecież w skrypcie mieć zapisanych ścieżek na sztywno!
Czytam więc reference dla cmd. Zabrałem się do tego po lekturze linka poniżej. Należy zwrócić uwagę że I to numer od 0 - n
%~fI - expands %I to a fully qualified path name %~dI - expands %I to a drive letter only %~pI - expands %I to a path only
Co ciekawe podobny rezultat dostałem gdy sprawdziłem zawartość %0 podobnie jak dla %~f0
Idąc tym tropem spróbowałem ustawić zmienną. Wydaje się działać:
Idąc tym tropem spróbowałem ustawić zmienną. Wydaje się działać:
set BATH_PATH=%~d0%~p0Po tych zmianach kod program.bat wygląda tak
set BATH_PATH=%~d0%~p0 java -cp %BATH_PATH%\lib1.jar Class1Teraz działa tak jak chciałem!
Brak komentarzy:
Prześlij komentarz