Jak uzyskać katalog skryptu, który został uruchomiony i użyć go w pliku .cmd?Skrypt sterujący .cmd/.bat, jak zdobyć katalog uruchomionego skryptu
Odpowiedz
Raymond Chen ma kilka pomysłów:
http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx
Cytowane tutaj w całości, ponieważ archiwa MSDN wydają się być nieco zawodne:
Łatwym sposobem jest użycie
%CD%
pseudo-zmienna. Rozwija się do bieżącego katalogu roboczego .
set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory
(Oczywiście, katalog zapisu/odczytu mógł łatwiej się zrobiono z
pushd
/popd
, ale nie o to tu chodzi).
%CD%
trik jest przydatny nawet z linii poleceń. Na przykład I często znajduję się w katalogu, w którym jest plik, który chcę, aby działał, ale ... oh, muszę wykonać katalog do innego katalogu, aby wykonać tę operację w celu uzyskania .
set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args
(I jak użycie
%_%
w moim zmiennej środowiska zarysowanie).Typ
SET /?
zobaczyć innych pseudo-zmienne dostarczone przez procesorem sterującym.
Również komentarze w artykule są warte skanowanie na przykład ten:
http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741
ta obejmuje wykorzystanie% ~ dp0:
Jeśli chcesz wiedzieć, gdzie znajduje się plik wsadowy:
%~dp0
%0
to nazwa pliku wsadowego.~dp
podaje napęd i ścieżkę podaną przez argument .
To nie odpowiada na pytanie. % CD% podaje bieżący katalog, a tym, co zostało zadane, jest katalog skryptu. – ketorin
** @ ketorin: ** To ** DOES ** odpowiedzieć na pytanie. % CD% zmieni się, jeśli sam skrypt zmieni katalog w całym jego użytkowaniu (pushd/cd/..), ale **% ~ dp0 ** będzie ** NIE ** zmieniać i zawsze wskazywać lokalizację skryptu. – Jay
-1 Nie mogę stwierdzić, czy to odpowiada na pytanie, czy nie. Czy możesz pokazać mi przykład? –
Jest to odpowiednik ścieżki skryptu:
%~dp0
używa składni partia parametr wewnętrzny. Parametr 0 jest zawsze samym skryptem.
Jeśli skrypt jest przechowywany pod adresem C:\example\script.bat
, wówczas %~dp0
ma wartość C:\example\
.
ss64.com zawiera więcej informacji o składni rozszerzenia parametrów. Oto odpowiedni fragment:
Możesz uzyskać wartość dowolnego parametru, używając%, a następnie jego numerycznego położenia w linii poleceń.
[...]
Jeżeli parametr jest wykorzystywany do dostarczania pliku stosuje się następującą składnię rozszerzonym mogą być stosowane:
[...]
% ~ D1 Expand% 1 do litery dysku tylko - C:
[...]
% ~ p1 Rozwiń% 1 do ścieżki tylko przykład \ utils \ to zawiera znak końcowy \, który może być interpretowany jako znak escape za pomocą niektórych poleceń.
[...]
Modyfikatory powyżej można łączyć ze sobą:
DP1 Expand% ~ 1% do litery napędowego i ścieżkach
[...]
Możesz uzyskać ścieżkę do samego skryptu wsadowego z% 0, można do niego zastosować rozszerzenia parametrów, więc% ~ dp0 zwróci Dysk i Ścieżkę do skryptu wsadowego, np. W: \ scripts \
Dokładnie to, czego potrzebowałem. I połączyłem ten blog z moim blogiem jako przypomnienie :) –
Nie jestem pewien, czy jest to błąd/błąd w cytowanym tekście, ale w moim skrypcie potrzebuję "% ~ d0", aby otrzymać literę dysku! % ~ d1 jest pusty w moim przypadku. – eftokay83
W moich oczach/sytuacji jest to lepsze od zaakceptowanej odpowiedzi.Jeśli uruchomisz skrypt wiersza poleceń "jako Administrator" (prawy przycisk myszy), twój skrypt zostanie uruchomiony z Windows \ system32. Zaakceptowana odpowiedź NIE da ci lokalizacji skryptu, da ci system Windows \ system32 ponownie. To znaczy. NINIEJSZA odpowiedź pomoże ci to naprawić, uruchamiasz skrypt z cd% ~ dp0 –
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d
pushd %curdir%
możliwe duplikat [? Jak uzyskać ścieżkę skryptu wsadowego w Windows] (http://stackoverflow.com/questions/3827567/how- to-get-the-the-batch-script-in-windows) – Celada