Как получить путь к пакетному скрипту в Windows? - PullRequest
285 голосов
/ 30 сентября 2010

Я знаю, что %0 содержит полный путь пакетного сценария, например c:\path\to\my\file\abc.bat

Я бы path был бы равен c:\path\to\my\file

Как мне этого достичь?

Ответы [ 6 ]

489 голосов
/ 30 сентября 2010

%~dp0 будет каталогом. Вот некоторая документация по всем модификаторам пути .Забавные вещи: -)

Чтобы удалить окончательный обратный слеш, вы можете использовать синтаксис подстроки :n,m, например:

SET mypath=%~dp0
echo %mypath:~0,-1%

Я не верю, что есть способ объединитьСинтаксис %0 с синтаксисом :~n,m, к сожалению.

14 голосов
/ 27 октября 2015

%~dp0 может быть относительным путем.Чтобы преобразовать его в полный путь, попробуйте что-то вроде этого:

pushd %~dp0
set script_dir=%CD%
popd
10 голосов
/ 01 апреля 2016

Вы можете использовать следующий скрипт, чтобы получить путь без "\"

for %%i in ("%~dp0.") do SET "mypath=%%~fi"
0 голосов
/ 22 февраля 2019

Вы можете использовать %~dp0, d означает только диск, p означает только путь, 0 является аргументом для полного имени файла пакетного файла.

Например, если путь к файлу был C:\ Users \ Oliver \ Desktop \ example.bat, тогда аргумент будет равен C: \ Users \ Oliver \ Desktop \, также вы можете использовать команду set cpath=%~dp0 && set cpath=%cpath:~0,-1% и использовать переменную %cpath%, чтобы удалить косую черту.

0 голосов
/ 03 октября 2014

Я работаю на компьютере с Windows 7, и в итоге я использовал строки ниже, чтобы получить абсолютный путь к папке для моего скрипта bash.

Я пришел к этому решению, посмотрев на http://www.linuxjournal.com/content/bash-parameter-expansion.

#Get the full aboslute filename.
filename=$0
#Remove everything after \. An extra \ seems to be necessary to escape something...
folder="${filename%\\*}"
#Echo...
echo $filename
echo $folder
0 голосов
/ 30 сентября 2010

Это будет переменная %CD%.

@echo off
echo %CD%

%CD% возвращает текущий каталог, в котором находится пакетный скрипт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...