所以我使用curl从GitHub获取经常更改的下载链接。 使用for / f我可以分割每个前斜线'/'
卷曲的字符串我得到的变量看起来像这样
v0.30.2" >重定向<
由此,我设法使用子字符串提取版本,但是当字符数改变时它无法工作,所以我必须手动编辑子字符串长度。
解决问题 我试图实现一个for / f从上面的变量中提取数字,所以我需要使用theese标志作为分隔符 v。 “然而,每当我尝试使用双引号作为分隔符时,我都无处可去。我读到使用转义字符是可行的方法,但我没有运气。有人可以帮忙吗?
最近破解这个问题的尝试看起来像这样:
SetLocal EnableDelayedExpansion
set myStr=v0.30.2^"^>redirected^<
for /f tokens^=1-3 delims^=^.^"^v %%A in ("%myStr%") do (
echo %%A
echo %%B
echo %%C
)
pause
预期输出应为
0
30
2
答案 0 :(得分:3)
你错过了一个插入符号,因为表达式tokens=1-3 delims=.v"
需要是解析器的一个块。
通常只需引用FOR /F "tokens=1-3 delims=.v"
中的块即可实现这一目标
但是在双引号应该在分隔符列表中的特殊情况下,必须省略外部引号,而是必须使用插入符号粘贴块。
for /f tokens^=1-3^ delims^...
myStr的扩展应该通过延迟扩张而不是扩大百分比来完成。
@echo off
SetLocal EnableDelayedExpansion
set ^"myStr=v0.30.2">redirected<"
for /f tokens^=1-3^ delims^=^.^"v %%A in ("!myStr!") do (
echo %%A
echo %%B
echo %%C
)
答案 1 :(得分:2)
我假设你的%myStr%
变量实际上是先前尝试从一行中检索字符串的一部分。如果是这种情况,那么您可以进一步解析该行以仅检索版本号。
首先是这样的:
Rem drop everything at the first doublequote
Set "myStr=%myStr:"="&:"%"
然后这个:
Rem keep everything from the first v
Set "myStr=%myStr:*v=%"
如果你想输出它的各个部分:
For %%A In (%myStr:.= %) Do Echo %%A