Каков текущий каталог в командном файле?


511

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

Мой вопрос: когда я создаю командный файл, какой каталог является текущим? Это каталог, в котором находится файл, или это тот же каталог, который отображается в командной строке, или что-то еще?

Ответы:


1027

Из вашего командного файла:

  • %cd%ссылается на текущий рабочий каталог (переменная)
  • %~dp0 ссылается на полный путь к каталогу пакетного файла (статический)
  • %~dpnx0и %~f0оба ссылаются на полный путь к каталогу пакета и имя файла (статический).

Смотрите также: Что означает% ~ dp0 и как это работает?


5
@ Јоеу - %0может дать имя текущей подпрограммы, но всегда%~dp0 будет указывать полный путь к исполняемому пакетному файлу.
ДБЕНХАМ

77
На самом деле, похоже, что% ~ dp0 дает полный путь к каталогу , в котором находится исполняемый пакетный файл.% ~ Dpnx0 (что эквивалентно% ~ f0) дает полный путь к пакетному файлу. См. Robvanderwoude.com/parameters.php для более подробной информации.
deadlydog

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 от имени администратора даст вам 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
Mohammad
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.