Вы можете использовать переменную окружения %~dp0
, чтобы получить диск и путь к пакетному файлу, запущенному в данный момент.Оттуда это не очень эффективный метод удаления конца этой строки символ за символом и построения новой строки.
Например, пакетный файл:
@setlocal enableextensions enabledelayedexpansion
@echo off
set olddir=%~dp0
echo Current directory is: !olddir!
if "!olddir:~-1!" == "\" (
set olddir=!olddir:~0,-1!
)
set lastbit=
:loop
if not "!olddir:~-1!" == "\" (
set lastbit=!olddir:~-1!!lastbit!
set olddir=!olddir:~0,-1!
goto :loop
)
set newdir=c:\build\bin\!lastbit!
echo New directory is: !newdir!
endlocal
Запуск от имени c:\data\src\branch1\qq.cmd
возвращает следующее:
Current directory is: C:\data\src\branch1\
New directory is: c:\build\bin\branch1
Что касается того, как это работает, вы можете использовать !xyz:~n,m!
для создания подстроки переменной окружения, а отрицательное значение m
или n
означает изконец, а не начало.Таким образом, первый if
блок удаляет завершающий \
, если он там есть.
Цикл похож, но он переносит символы с конца пути в новую переменную вплоть до точки, где вы найдете\
.Итак, у вас есть последний бит пути, и очень просто добавить его к вашему фиксированному новому пути.