Windows 如何仅从SVN获取分支名称,并通过拆分URL将其打印到变量中?
我试图在命令提示符中仅获取SVN分支的名称,并将其设置为变量。Windows 如何仅从SVN获取分支名称,并通过拆分URL将其打印到变量中?,windows,batch-file,svn,cmd,Windows,Batch File,Svn,Cmd,我试图在命令提示符中仅获取SVN分支的名称,并将其设置为变量。 我能够成功地获取URL,但仅为分支名称设置值时遇到问题。 不幸的是,%分支%最终为空 如果还有其他更简单的方法也很好。 警告:默认情况下,Windows 7上未安装任何工具(SVN除外) FOR /F "tokens=* usebackq" %%F IN (`svn info --show-item url`) DO SET fullUrl=%%F ECHO %fullUrl% FOR /F "delims=/" %%F IN (
我能够成功地获取URL,但仅为分支名称设置值时遇到问题。
不幸的是,%分支%最终为空 如果还有其他更简单的方法也很好。
警告:默认情况下,Windows 7上未安装任何工具(SVN除外)
FOR /F "tokens=* usebackq" %%F IN (`svn info --show-item url`) DO SET fullUrl=%%F
ECHO %fullUrl%
FOR /F "delims=/" %%F IN (%fullUrl%) DO SET branch=%%F
ECHO %branch%
命令窗口输出:
C:\workspaces\Release_10_1>FOR /F "tokens=* usebackq" %F IN (`svn info --show-item url`) DO SET fullUrl=%F
C:\workspaces\Release_10_1>SET fullUrl=https://svn/path/branches/releases/Release_10_1
C:\workspaces\Release_10_1>ECHO https://svn/path/branches/releases/Release_10_1
https://svn/path/branches/releases/Release_10_1
C:\workspaces\Release_10_1>FOR /F "delims=/" %F IN (https://svn/path/branches/releases/Release_10_1) DO SET branch=%F
The system cannot find the file https://svn/path/branches/releases/Release_10_1.
C:\workspaces\Release_10_1>ECHO
ECHO is on.
预期成果:
fullUrl=https://svn/path/branches/releases/Release_10_1
分支=
Release\u 10\u 1
实际结果:
fullUrl=https://svn/path/branches/releases/Release_10_1
分支=`
FOR %%F IN ("%fullUrl%") DO SET "branch=%%~nxF"
ECHO %branch%
在%%F
中选择“文件名”的名称
和扩展名
,将在最后的/
之后生成该部分
在set
中插入引号,以确保在指定的值中省略尾随空格
在%%F
中选择“文件名”的名称
和扩展名
,将在最后的/
之后生成该部分
在
set
中插入引号,以确保在指定的值中省略尾随空格。Magoo有更好的答案
这些年来,我一直在使用这段代码,因为我假设文件系统无法理解带有正斜杠的路径。当您不知道有多少分隔字段时,这将用于获取最后一个分隔字段
@echo off
SET fullUrl=https://svn/path/branches/releases/Release_10_1
set turl=%fullUrl%
:branch
FOR /F "tokens=1* delims=/" %%G IN ("%tUrl%") DO (
SET branch=%%G
SET tUrl=%%H
)
IF NOT "%tUrl%"=="" GOTO branch
echo %fullUrl%
ECHO %branch%
pause
马古有更好的答案 这些年来,我一直在使用这段代码,因为我假设文件系统无法理解带有正斜杠的路径。当您不知道有多少分隔字段时,这将用于获取最后一个分隔字段
@echo off
SET fullUrl=https://svn/path/branches/releases/Release_10_1
set turl=%fullUrl%
:branch
FOR /F "tokens=1* delims=/" %%G IN ("%tUrl%") DO (
SET branch=%%G
SET tUrl=%%H
)
IF NOT "%tUrl%"=="" GOTO branch
echo %fullUrl%
ECHO %branch%
pause
以下是一种不带
的方法,用于:
@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“完整URL”=https://svn/path/branches/releases/Release_10_1"
rem//预设临时变量:
设置“tempURL=%fullURL%”
:循环
rem//从字符串开始到第一个`/`拆分所有内容:
如果定义了tempURL,则设置“分支=%tempURL://=%”
rem//拆分字符串等于前一个字符串,因此未找到“/”,因此找到分支:
如果不是“%branch%”,则为“%tempURL%”(
设置“tempURL=%branch%”
转到:循环
)
rem//返回找到的分支,即最后一个“/”之后的所有内容:
回音(%branch%)
端部
退出/B
以下是一种不使用的方法:
@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“完整URL”=https://svn/path/branches/releases/Release_10_1"
rem//预设临时变量:
设置“tempURL=%fullURL%”
:循环
rem//从字符串开始到第一个`/`拆分所有内容:
如果定义了tempURL,则设置“分支=%tempURL://=%”
rem//拆分字符串等于前一个字符串,因此未找到“/”,因此找到分支:
如果不是“%branch%”,则为“%tempURL%”(
设置“tempURL=%branch%”
转到:循环
)
rem//返回找到的分支,即最后一个“/”之后的所有内容:
回音(%branch%)
端部
退出/B
如果您知道它将始终是第6个分隔字段,那么您可以在FOR命令中使用tokens选项。此外,在FOR命令中,将fullurl变量用双引号括起来。99%的时间它将位于特定位置,但我也必须注意这1%。如果您知道它将始终是第6个分隔字段,那么您可以在FOR命令中使用tokens选项。另外,在FOR命令中,将fullurl变量用双引号引起来。99%的时间它都会在特定的位置,但还有1%的时间我必须处理。哇。我认为这对转发的斜杠不起作用。@Squashman:我只是事后才想到。首先,我使用了%fullurl:/=\%
(操作:将fullurl
中的每个/
替换为“`:”)这正是我所需要的。谢谢!不过我有一个问题。“branch=%~nxF”的双引号是什么对于?@scrascydev:=
后一行的字符串被分配给变量。某些编辑器保留尾随空格(有时您希望它们保留尾随空格)如果行上有尾随空格,则这些空格将包含在指定的值中。以指定的方式使用引号将确保不包含这些尾随空格。由于空格很难看到,特别是在行的末尾,因此使用常规语法可能会在t栏杆空格的问题是第一次遇到的。谢谢,这和我想的差不多,我只是习惯于只看到双引号中的值。这会允许一个以w/和/或包含空格字符开头的变量吗?哇。我不认为这会对转发的斜杠起作用。@Squashman:我只是事后才想到的。首先,我使用了%fullurl:/=\%
(操作:将fullurl
中的每个/
替换为“`”):这正是我所需要的。谢谢不过,我有一个问题。“branch=%%~nxF”周围的双引号是什么?@scassydev:将=
赋值给变量后的行上的字符串。有些编辑器保留尾随空格(有时您希望保留),如果行上有尾随空格,则这些将包含在指定的值中。以指定的方式使用引号将确保不包括这些尾随空格。因为空格很难看到,特别是在行尾,所以当第一次遇到尾随空格的问题时,使用传统语法可能会让人挠头。谢谢,这正是我所想的,我习惯于只看到双引号中的值。这会允许一个以w/和/或包含空格字符开头的变量吗?%%H
在哪里