2008-09-24 7 views

Odpowiedz

53

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 .

+12

To nie odpowiada na pytanie. % CD% podaje bieżący katalog, a tym, co zostało zadane, jest katalog skryptu. – ketorin

+3

** @ 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

+0

-1 Nie mogę stwierdzić, czy to odpowiada na pytanie, czy nie. Czy możesz pokazać mi przykład? –

135

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 \

+0

Dokładnie to, czego potrzebowałem. I połączyłem ten blog z moim blogiem jako przypomnienie :) –

+0

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

+0

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 –

1
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d 

pushd %curdir% 

Source