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

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%

user9517 поддерживает GoFundMonica
источник
4
% CD% сохраняет путь, по которому вы выполняете пакет, а не там, где существует пакетный файл
Мохаммад AL-Rawabdeh
4
@ Мохаммед: Действительно, это текущий каталог. Другой - это каталог, в котором находится пакетный файл. Эти два не одно и то же, и ваш вопрос явно задает этот вопрос. Поэтому, пожалуйста, измените его, если вы не это имеете в виду.
Джои
% CD% возвращает текущий путь к пакетному файлу, но завершается неудачно, когда мы запускаем пакетный файл от имени администратора. Когда мы запускаем командный файл от имени администратора, он возвращает путь к System32. Поэтому лучше использовать% ~ dp0 для полного пути
% ~ dp0 дает каталог исполняемого пакетного файла. Если командный файл находится в другом каталоге, вы получите этот другой каталог. % CD% всегда дает вам текущий каталог.
Михай Данила
Для справки читателя - в вопросе изначально использовался термин «текущий каталог», а это означает каталог, содержащий скрипт - теперь это исправлено.
Чиккодоро
4

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

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

Mechaflash
источник
0

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

Опция 1:

chdir 

Вариант 2:

echo %CD%
sensoft
источник
То же самое и здесь: это не было намерением ФП - теперь вопрос яснее.
Чиккодоро