Pobierz katalog zawierający aktualnie wykonywany skrypt wsadowy


30

Używam %0w pliku wsadowym, aby uzyskać zawierający katalog pliku wsadowego, ale wynik jest następujący:

c:\folder1\folder2\batch.bat

Chcę tylko katalog bez nazwy pliku wsadowego, taki jak: -

c:\folder1\folder2\

Jak mogę to zrobić? Może powinienem przefiltrować ścieżkę. Jeśli tak, jak mogę to zrobić?


Używając% 0 w pliku wsadowym jako części wiersza poleceń, powinieneś użyć% 0 \ .. \ RestOfStuff. Podwójna kropka przenosi ją z powrotem obok nazwy pliku.
John Gardeniers

Katalog zawierający aktualnie wykonywany skrypt niekoniecznie jest taki sam jak bieżący katalog roboczy (CD)! Zredagowałem to pytanie odpowiednio - teraz unika się terminu „bieżący katalog”.
chiccodoro

Odpowiedzi:


52
%~p0

Zwróci tylko ścieżkę.

%~dp0

Zwróci dysk + ścieżkę.

Więcej informacji na ten temat można znaleźć na stronie Microsoft .

Informacje na temat tej składni można również znaleźć w pomocy polecenia for , wykonując for /?w systemie operacyjnym Windows.


2
Jako innego źródła odniesienia, ta sama lista zmiennych substytucji pokazano również po wpisaniufor /?
Kevin

% ~ dp0 podaje katalog wykonującego plik wsadowy. Jeśli plik wsadowy znajduje się w innym katalogu, otrzymasz ten inny katalog. % CD% zawsze daje bieżący katalog.
Mihai Danila

@MihaiDanila, nie, nie o to pytał OP.
Bart De Vos,

Właściwie dotarłem do tego pytania, szukając sposobu na uzyskanie bieżącego katalogu. To był pierwszy hit w Google. Tytuł oczywiście mówi o bieżącym katalogu, chociaż masz rację co do treści. Oboje mamy rację, ale myślę, że kłamstwo i ja mam większą rację co do tego, co pytanie faktycznie przekazuje, pomimo tego, co było zamierzone. Właśnie dlatego podniosłem odpowiedź Laina ... Należy zmienić nazwę tytułu pytania, aby był zsynchronizowany z samym pytaniem.
Mihai Danila

1
Prawdopodobnie mógł zostać
podany

16

Bieżący katalog znajduje się w% CD%


4
% CD% zachowuje ścieżkę, z której wykonuje się wsad, a nie tam, gdzie istnieje plik wsadowy
Mohammad AL-Rawabdeh

4
@Mohammad: Rzeczywiście, jest to bieżący katalog. Drugi to katalog, w którym znajduje się plik wsadowy. Te dwa nie są takie same, a twoje pytanie wyraźnie dotyczy tego pytania. Więc edytuj to, jeśli nie to masz na myśli.
Joey,

% CD% zwraca bieżącą ścieżkę pliku wsadowego, ale kończy się niepowodzeniem, gdy wykonujemy plik wsadowy jako administrator. Gdy uruchamiamy plik wsadowy jako administrator, wówczas zwraca ścieżkę System32. Lepszą opcją jest użycie% ~ dp0 dla pełnej ścieżki

% ~ dp0 podaje katalog wykonującego plik wsadowy. Jeśli plik wsadowy znajduje się w innym katalogu, otrzymasz ten inny katalog. % CD% zawsze daje bieżący katalog.
Mihai Danila

Dla odniesienia do czytelnika - pytanie pierwotnie używało terminu „katalog bieżący”, a jednocześnie oznaczało katalog zawierający skrypt - teraz jest to ustalone.
chiccodoro

4

Niektóre wyrażenia wpływające na nazwę pliku:

~f0poda w pełni kwalifikowaną nazwę pliku.
~dpnx0poda to samo co ~f0, ale pokazuje to, że można go podzielić na części: d = dysk p = ścieżka n = nazwa x = rozszerzenie


0

użyj polecenia chdir

Opcja 1:

chdir 

Opcja 2:

echo %CD%

To samo tutaj: nie było to intencją PO - pytanie jest teraz jaśniejsze.
chiccodoro
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.