批处理文件字符串操作

Vik*_*ehr 3 string build-process batch-file environment-variables

然而,这是一个非常具体的问题;

假设我有一个从位于目录中的\运行的批处理文件 c:\data\src\branch_1

如何将我的环境变量设置%buildpath%c:\build\bin\branch_1一个批处理文件?

(要清楚一点,如果c:\foo\bar\branch_2我想要将相同的批处理文件设置%buildpath%c:\build\bin\branch_2)

pax*_*blo 6

您应该能够使用环境变量%~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
Run Code Online (Sandbox Code Playgroud)

运行as c:\data\src\branch1\qq.cmd返回以下内容:

Current directory is: C:\data\src\branch1\
New directory is: c:\build\bin\branch1
Run Code Online (Sandbox Code Playgroud)

至于它是如何工作的,你可以!xyz:~n,m!用来做一个环境变量的子串,而对于从末尾而不是从头开始的负面mn手段.因此,如果它在那里,第一个if块会剥离尾随\.

循环类似,但它将字符从路径末尾传输到一个新变量,直到你找到它为止\.那么你就拥有了路径的最后一点,将它附加到固定的新路径上是一件简单的事情.