Batch file /f的批处理文件未转义双引号

Batch file /f的批处理文件未转义双引号,batch-file,Batch File,因此,我使用curl从GitHub获取一个经常更改的下载链接。 使用for/f,我可以将curl返回的字符串按每个前斜杠进行拆分 我得到的变量如下所示 v0.30.2>重定向您又错过了一个插入符号,因为expressiontokens=1-3 delims=.v“需要是解析器的一个块。 通常,只需引用中的块,如/F“tokens=1-3 delims=.v” 但是在分隔符列表中应该包含双引号的特殊情况下,必须省略外部引号,而必须使用插入符号粘合块 for /f tokens^=1-3^ deli

因此,我使用curl从GitHub获取一个经常更改的下载链接。 使用for/f,我可以将curl返回的字符串按每个前斜杠进行拆分

我得到的变量如下所示


v0.30.2>重定向您又错过了一个插入符号,因为expression
tokens=1-3 delims=.v“
需要是解析器的一个块。
通常,只需引用
中的块,如/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
)
@echo关闭
SetLocal EnableDelayedExpansion

set^“myStr=v0.30.2”>重定向我假设您的
%myStr%
变量实际上是先前尝试从一行检索字符串的一部分。如果是这种情况,那么您可以进一步解析该行以仅检索版本号

首先是这样的:

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
Rem在第一个双引号处删除所有内容
设置“myStr=%myStr:=”和:%“
那么这个,

Rem从第一个v开始保留所有内容
设置“myStr=%myStr:*v=%”
如果您想输出它的各个部分:

对于(%myStr:.=%)中的%%A,执行回显%%A

“谢谢你!”我想问一下为什么令牌需要逃走?我得到了等号,但在3之后呢?这是后面空白区的逃生吗?@阿迪斯比克,我补充了更多的解释。BTW我会考虑COMPO的解决方案,因为它更容易理解,它不依赖于双引号哈克谢谢你的时间,我谢尔。我试着研究它来理解:)我实现了以前的解决方案
@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
)