Jak uzyskać katalog skryptu, który został uruchomiony i użyć go w pliku .cmd?
Jak uzyskać katalog skryptu, który został uruchomiony i użyć go w pliku .cmd?
Odpowiedzi:
Raymond Chen ma kilka pomysłów:
https://devblogs.microsoft.com/oldnewthing/20050128-00/?p=36573
Cytowane tutaj w całości, ponieważ archiwa MSDN są raczej zawodne:
Najłatwiejszym sposobem jest użycie
%CD%
pseudozmiennej. Rozwija się do bieżącego katalogu roboczego.
set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory
(Oczywiście zapisywanie / przywracanie katalogu można było łatwiej wykonać za pomocą
pushd
/popd
, ale nie o to tutaj chodzi.)
%CD%
Sztuką jest przydatny nawet z linii poleceń. Na przykład często znajduję się w katalogu, w którym jest plik, na którym chcę operować, ale ... och, muszę przejść do innego katalogu, aby wykonać tę operację.
set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args
(Lubię używać
%_%
jako mojej zmiennej środowiskowej scratch).Wpisz,
SET /?
aby zobaczyć inne pseudozmienne udostępniane przez procesor poleceń.
Również komentarze w artykule są warte przeskanowania, na przykład ten (przez WayBack Machine, ponieważ komentarze zniknęły ze starszych artykułów):
http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741
Obejmuje to użycie% ~ dp0:
Jeśli chcesz wiedzieć, gdzie znajduje się plik wsadowy:
%~dp0
%0
to nazwa pliku wsadowego.~dp
podaje dysk i ścieżkę podanego argumentu.
Jest to odpowiednik ścieżki do skryptu:
%~dp0
Używa składni rozszerzenia parametru wsadowego. Parametr 0 to zawsze sam skrypt.
Jeśli twój skrypt jest przechowywany pod adresem C:\example\script.bat
, to %~dp0
obliczaC:\example\
.
ss64.com zawiera więcej informacji na temat składni rozszerzenia parametru. Oto odpowiedni fragment:
Możesz uzyskać wartość dowolnego parametru, używając%, po którym następuje jego pozycja numeryczna w wierszu poleceń.
[…]
Gdy parametr jest używany do podania nazwy pliku, można zastosować następującą rozszerzoną składnię:
[…]
% ~ d1 Rozwiń% 1 tylko do litery dysku - C:
[…]
% ~ p1 Rozwiń% 1 tylko do ścieżki, np. \ utils \ zawiera końcowy znak \, który może być interpretowany jako znak zmiany znaczenia przez niektóre polecenia.
[…]
Powyższe modyfikatory można łączyć:
% ~ dp1 Rozwiń% 1 tylko do litery dysku i ścieżki
[…]
Możesz uzyskać ścieżkę do samego skryptu wsadowego za pomocą% 0, można do tego zastosować rozszerzenia parametrów, aby% ~ dp0 zwrócił dysk i ścieżkę do skryptu wsadowego, np. W: \ scripts \