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ć?

Mohammad AL-Rawabdeh
źródło
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.

Bart De Vos
źródło
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%

user9517 obsługuje GoFundMonica
źródło
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

Mechaflash
źródło
0

użyj polecenia chdir

Opcja 1:

chdir 

Opcja 2:

echo %CD%
sensoft
źródło
To samo tutaj: nie było to intencją PO - pytanie jest teraz jaśniejsze.
chiccodoro