Який поточний каталог у пакетному файлі?


510

Я хочу створити кілька пакетних файлів для автоматизації програми.

Моє запитання, коли я створюю пакетний файл, що таке поточний каталог? Це каталог, де знаходиться файл, чи це той самий каталог, який відображається в командному рядку, чи щось інше?

Відповіді:


1025

Зсередини вашого пакетного файлу:

  • %cd%посилається на поточний робочий каталог (змінна)
  • %~dp0 посилається на повний шлях до каталогу пакетного файлу (статичний)
  • %~dpnx0і %~f0обидва посилаються на повний шлях до каталогу партії та імені файлу (статичний).

Дивіться також: Що означає% ~ dp0 і як це працює?


5
@ Јοеу - %0може дати ім'я поточної підпрограми, але %~dp0буде завжди давати повний шлях до виконуючого пакетного файлу.
dbenham

77
Насправді, схоже на те, що% ~ dp0 дає повний шлях до каталогу, в якому знаходиться виконавчий пакетний файл.% ~ Dpnx0 (що еквівалентно% ~ f0) дає повний шлях до пакетного файлу. Докладнішу інформацію див. У розділі robvanderwoude.com/parameters.php .
смертельної собаки

6
Дивіться також хороші детальні відповіді на подібне питання: Отримайте список переданих аргументів у пакетному скрипті Windows (.bat)
olibre

1
На жаль, коли запускати як процес з .net% ~ dp0 є робочою директорією, а не каталогом пакетних файлів, це виявилося важким способом.
бродяга

3
Як більш чіткий приклад, коли клацнути правою кнопкою миші на .cmdфайл і працює як адміністратор, %cd%подається C:\WINDOWS\system32і %~dp0надається каталог пакетного файлу з косою косою рисою.
icc97

25

Це , як правило , це каталог , з якого запускається пакетний файл, але якщо запустити пакетний файл з ярлика, інший стартовий каталог може бути надано. Крім того, коли ви перебуваєте в cmd, і ваш поточний каталог c:\dir3, ви все одно можете запустити пакетний файл, використовуючи c:\dir1\dir2\batch.batв цьому випадку поточний каталог c:\dir3.


11

У пакетному файлі% cd% - це найчастіше використовувана команда для поточного каталогу, хоча ви можете встановити власну змінну:

set mypath=%cd%
echo %mypath% (where %mypath% is the current directory that the batch file is sitting in)

Тому скажіть, що ви хотіли відкрити Myprog.exe. Якби вона була в одній папці, ви використовували б команду:

start %mypath%\Myprog.exe

Це відкриє Myprog з поточної папки.

Інший варіант - зробити каталог на C: під назвою AutomatePrograms. Потім ви переносите свої файли в цю папку, після чого їх можна відкрити за допомогою наступної команди:

start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"

1
Як зазначається у верхній відповіді тут, %cd%він мінливий, тому запуск пакетного файлу з Windows Explorer як адміністратора дасть, C:\WINDOWS\system32що майже точно не те, що ви хочете. %~dp0є більш послідовним.
icc97

6

Скажіть, ви відкривали файл у вашому поточному каталозі. Командою було б:

 start %cd%\filename.filetype

Я сподіваюся, що я відповів на ваше запитання.


5

Це каталог, з якого ви запускаєте команду для виконання пакетного файлу.

Як зазначено у вищенаведених відповідях, ви можете додати нижчезазначену команду до свого сценарію, щоб перевірити:

> set current_dir=%cd%
> echo %current_dir%  

4

Це каталог, з якого ви запускаєте пакетний файл. Наприклад, якщо ваша партія є, c:\dir1\dir2і ви це зробите cd c:\dir3, тоді запустіть пакет, поточний каталог буде c:\dir3.


0

Всього мої 2 копійки. Наступна команда не вдається, якщо викликається з пакетного файлу (Windows 7), розміщеного на pendrive:

xcopy /s /e /i %cd%Ala C:\KS\Ala

Але це робить цю роботу:

xcopy /s /e /i %~dp0Ala C:\KS\Ala

Це перемикач, який я шукав, щоб визначити шлях батьківського каталогу мого файлу bat без цього файлу:%~dp0
Ammar Mohammad
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.