Командная строка .cmd/.bat скрипт, как получить каталог запущенного скрипта

StackOverflow https://stackoverflow.com/questions/130112

  •  02-07-2019
  •  | 
  •  

Вопрос

Как вы можете получить каталог скрипта, который был запущен, и использовать его в файле .cmd?

Это было полезно?

Решение

У Рэймонда Чена есть несколько идей:

https://devblogs.microsoft.com/oldnewthing/20050128-00/?p=36573

Цитируется здесь полностью, поскольку архивы MSDN, как правило, несколько ненадежны:

Самый простой способ - использовать %CD% псевдопеременная.Он расширяется до текущего рабочего каталога .

set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory

(Конечно, директорию сохранения/восстановления может более легко сделано с pushd/popd, но дело здесь не в этом.)

Тот Самый %CD% трюк удобен даже из командной строки.Например, я часто нахожусь в каталоге, где есть файл, с которым я хочу поработать, но...о, мне нужно выполнить chdir в какой-нибудь другой каталог, чтобы выполнить эту операцию.

set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args

(Мне нравится использовать %_% как моя переменная среды scratch.)

Тип SET /? чтобы просмотреть другие псевдопеременные, предоставляемые командой processor.

Также стоит отсканировать комментарии в статье, например, этот (через WayBack Machine, поскольку комментарии из старых статей исчезли).:

http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741

Это распространяется на использование %~dp0:

Если вы хотите знать, где находится пакетный файл: %~dp0

%0 это имя пакетного файла. ~dp указывает диск и путь к указанному аргументу.

Другие советы

Это эквивалентно пути к скрипту:

%~dp0

При этом используется синтаксис расширения пакетного параметра.Параметром 0 всегда является сам скрипт.

Если ваш скрипт хранится по адресу C:\example\script.bat, тогда %~dp0 оценивает до C:\example\.

ss64.com содержит дополнительную информацию о синтаксисе расширения параметра.Вот соответствующий отрывок:

Вы можете получить значение любого параметра, используя %, за которым следует его числовая позиция в командной строке.

[...]

Когда параметр используется для указания имени файла, может быть применен следующий расширенный синтаксис:

[...]

%~d1 Разверните %1 только до буквы диска - C:

[...]

%~p1 Расширить %1 только до Пути, например\utils\ это включает в себя завершающий символ \, который некоторыми командами может интерпретироваться как escape-символ.

[...]

Приведенные выше модификаторы могут быть объединены:

%~dp1 Разверните %1 только до буквы диска и пути к нему

[...]

Вы можете получить путь к самому пакетному скрипту с помощью %0, к нему могут быть применены расширения параметров, поэтому %~ dp0 вернет диск и путь к пакетному скрипту, напримерW:\scripts\

for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d

pushd %curdir%

Источник

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top