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


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

3 76

3 ответа:

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

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, но дело не в этом.)

The %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 дает вам привод и путь указанный аргумент.

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

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

источник