Отримайте каталог, що містить поточно виконаний пакетний сценарій


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. Заголовок, очевидно, говорить про поточний каталог, хоча ви маєте рацію щодо вмісту. Ми обидва вірні, але я думаю, що ми лежимо, і я маю рацію щодо того, що насправді задає питання, незважаючи на те, що він передбачав. Ось чому я збільшив відповідь простроченої ... Заголовок питання слід перейменувати так, щоб він був синхронізований із самим питанням.
Михай Даніла

1
Можливо, заголовок статті у посиланні міг бути наданий, оскільки посилання вже не дійсне .....
Rupsingh Mathwale

16

Поточний каталог зберігається у% CD%


4
% CD% відновити шлях, який ви виконуєте з неї, не там, де існує пакетний файл
Mohammad AL-Rawabdeh

4
@Mohammad: Дійсно, це поточний каталог. Інший - каталог, де знаходиться пакетний файл. Ці два не однакові, і ваше запитання прямо для цього задається. Тому, будь ласка, відредагуйте це, якщо це не те, що ви маєте на увазі.
Joey

% 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.