Как вы можете получить каталог из script, который был запущен, и использовать его в файле .cmd?
Командная строка .cmd/.bat script, как получить каталог запуска script
Ответ 1
У Раймонда Чена есть несколько идей:
http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx
Цитируется здесь полностью, потому что архивы 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
(Мне нравится использовать
%_%
как переменную среды окружения.)Введите
SET /?
, чтобы увидеть другие псевдопеременные, предоставленные командой процессор.
Также комментарии в этой статье заслуживают внимания, например:
http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741
Это относится к использованию% ~ dp0:
Если вы хотите узнать, где находится пакетный файл:
%~dp0
%0
- это имя командного файла.~dp
дает вам диск и путь указанный аргумент.
Ответ 2
Это эквивалентно пути script:
%~dp0
В этом случае используется синтаксис расширения пакетного параметра. Параметр 0 всегда сам script.
Если ваш script хранится в C:\example\script.bat
, то %~dp0
оценивается как C:\example\
.
ss64.com содержит дополнительную информацию о синтаксисе расширения параметров. Вот соответствующий отрывок:
Вы можете получить значение любого параметра, используя%, за которым следует численное положение в командной строке.
[...]
Когда параметр используется для подачи имени файла, может применяться следующий расширенный синтаксис:
[...]
% ~ d1 Развернуть% 1 только на букву диска - C:
[...]
% ~ p1 Разверните% 1 до пути только, например.\utils\включает в себя трейлинг\который может быть интерпретирован как escape-символ некоторыми командами.
[...]
Модификаторы, указанные выше, могут быть объединены:
% ~ dp1 Разверните% 1 только на букву и путь диска
[...]
Вы можете получить путь к самому пакету script с% 0, для этого могут быть применены расширения параметров, поэтому% ~ dp0 вернет диск и путь к пакету script, например. W:\Сценарии\
Ответ 3
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d
pushd %curdir%