Пакетная обработка строки файла - PullRequest
3 голосов
/ 09 февраля 2011

Однако это очень специфический вопрос;

Скажем, у меня есть пакетный файл, запущенный из \ в каталоге c:\data\src\branch_1

Как мне установить переменную окружения %buildpath% в c:\build\bin\branch_1 в командном файле?

(Для большей ясности, если тот же пакетный файл находится в c:\foo\bar\branch_2, я хочу, чтобы он установил %buildpath% в c:\build\bin\branch_2)

Ответы [ 2 ]

6 голосов
/ 09 февраля 2011

Вы можете использовать переменную окружения %~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 блок удаляет завершающий \, если он там есть.

Цикл похож, но он переносит символы с конца пути в новую переменную вплоть до точки, где вы найдете\.Итак, у вас есть последний бит пути, и очень просто добавить его к вашему фиксированному новому пути.

1 голос
/ 23 ноября 2011

Старый регистр, но все же ...

простой способ установки текущего каталога в переменную.

@echo off
cd > dir.tmp
set /p directory= <dir.tmp
echo %directory%    <-- do whatever you want to the variable. I just did a echo..
del dir.tmp > nul
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...