Получить каталог, содержащий исполняемый в данный момент пакетный скрипт


30

Я использую %0в пакетном файле, чтобы получить каталог, содержащий пакетный файл, но результат: -

c:\folder1\folder2\batch.bat

Я хочу просто каталог, без имени командного файла, как это: -

c:\folder1\folder2\

Как я могу это сделать? Может быть, я должен отфильтровать путь. Если да, как я могу это сделать?


При использовании% 0 в командном файле в качестве части командной строки вы должны использовать% 0 \ .. \ RestOfStuff. Двойная точка возвращает его после имени файла.
Джон Гарденье

Каталог, содержащий текущий исполняемый скрипт, не обязательно совпадает с текущим рабочим каталогом (CD)! Я соответственно отредактировал вопрос - теперь он избегает термина «текущий каталог».
Чиккодоро

Ответы:


52
%~p0

Вернет только путь.

%~dp0

Вернет диск + путь.

Более подробную информацию по этому вопросу можно найти на сайте Microsoft .

Информацию об этом синтаксисе также можно найти в справке для команды for , выполнив ее for /?в ОС Windows.


2
В качестве другого справочного источника тот же список подстановок переменных также отображается при вводеfor /?
Кевин

% ~ dp0 дает каталог исполняемого пакетного файла. Если командный файл находится в другом каталоге, вы получите этот другой каталог. % CD% всегда дает вам текущий каталог.
Михай Данила

@ MihaiDanila, нет, это не то, что спросил ОП.
Барт Де Вос

На самом деле я добрался до этого вопроса, когда искал способ получить текущий каталог. Это был первый хит в Google. Название, очевидно, говорит о текущем каталоге, хотя вы правы насчет содержания. Мы оба правы, но я думаю, что Лэйн и я более правы относительно того, что на самом деле передает этот вопрос, несмотря на то, что было задумано. Вот почему я увеличил ответ Lain ... Название вопроса должно быть переименовано, чтобы быть синхронизированным с самим вопросом.
Михай Данила

1
Вероятно, название статьи в ссылке могло быть предоставлено, так как ссылка больше не действительна .....
Rupsingh Mathwale

16

Текущий каталог хранится в% CD%


4
% CD% сохраняет путь, по которому вы выполняете пакет, а не там, где существует пакетный файл
Мохаммад AL-Rawabdeh

4
@ Мохаммед: Действительно, это текущий каталог. Другой - это каталог, в котором находится пакетный файл. Эти два не одно и то же, и ваш вопрос явно задает этот вопрос. Поэтому, пожалуйста, измените его, если вы не это имеете в виду.
Джои

% CD% возвращает текущий путь к пакетному файлу, но завершается неудачно, когда мы запускаем пакетный файл от имени администратора. Когда мы запускаем командный файл от имени администратора, он возвращает путь к System32. Поэтому лучше использовать% ~ dp0 для полного пути

% ~ dp0 дает каталог исполняемого пакетного файла. Если командный файл находится в другом каталоге, вы получите этот другой каталог. % CD% всегда дает вам текущий каталог.
Михай Данила

Для справки читателя - в вопросе изначально использовался термин «текущий каталог», а это означает каталог, содержащий скрипт - теперь это исправлено.
Чиккодоро

4

Некоторые выражения, которые влияют на имя файла:

~f0даст полное имя файла.
~dpnx0даст то же, что и ~f0, но это показывает, что вы можете разбить его на части: d = диск p = путь n = имя x = расширение


0

используйте команду chdir

Опция 1:

chdir 

Вариант 2:

echo %CD%

То же самое и здесь: это не было намерением ФП - теперь вопрос яснее.
Чиккодоро
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.