Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 获取多个双引号之间的字符串值_Batch File - Fatal编程技术网

Batch file 获取多个双引号之间的字符串值

Batch file 获取多个双引号之间的字符串值,batch-file,Batch File,我需要提取以下字符串中间引号之间的int值: set str="val="6479695"/>" echo %str% 我需要的值是“6479695” 我已经试过了:() 但这让我犯了一个错误: 该命令的语法不正确 似乎只有一个双引号才有效 有人能帮忙吗?谢谢我认为主要的问题不在于语法本身,而在于立即(%)扩展发生在识别特殊字符之前,例如符号,因此在删除第一个“(通过%str:*”=%)后,出现在一对引号之外 当切换到不再出现问题时: setlocal EnableDelayedExpa

我需要提取以下字符串中间引号之间的int值:

set str="val="6479695"/>"
echo %str%
我需要的值是“6479695”

我已经试过了:()

但这让我犯了一个错误:

该命令的语法不正确

似乎只有一个双引号才有效


有人能帮忙吗?谢谢

我认为主要的问题不在于语法本身,而在于立即(
%
)扩展发生在识别特殊字符之前,例如符号
,因此在删除第一个
(通过
%str:*”=%
)后,
出现在一对引号之外

当切换到不再出现问题时:

setlocal EnableDelayedExpansion
set str=“val=”6479695“/>
回声!str!
设置“新建=!str:*”=!
回声!新的!
端部
这仍然无法提取字符串的正确部分,因为保留了剩余的
“/>”
。但是,这可以通过类似的方式删除(注意
,它是通过
^
删除的,因为它看起来没有引号):

set“new=!new!:”/^>“=”
或者,您可以使用带有
的a作为分隔符。由于使用通常带引号的选项字符串
for/F
无法将
定义为分隔符,因此我们使用未记录的未带引号的语法,其中必须转义
=
-符号和空格:

set str=“val=”6479695“/>
setlocal EnableDelayedExpansion
对于(“!str!”)中的/F标记^=2^delims^=^“^eol^=^”%%I,请设置“new=%%I”
回声!新的!
端部
要使所需的值甚至超过
endlocal
,请如下调整代码:

set str=“val=”6479695“/>
setlocal EnableDelayedExpansion
(对于/F标记^=2^delims^=^“^eol^=^”%%I in(“!str!”)do(
endlocal&设置“新=%%I”
))| |(endlocal&设置“new=”)
echo/%新%

只有当for/F循环没有迭代时,后面的部分才会执行,这是当输入字符串只有一个令牌时的情况;本部分的主要目的是在这种情况下也执行
endlocal

从问题代码中可以清楚地看出,字符串的初始设置没有如图所示。请你把代码中的实际行,而不是你上面发布的简化版本发布出来好吗。我这样问是因为在这一点之前,很可能可以用一种更简单的方式检索该值。另外,它看起来就像是在从文件中读取一行,因此如果您要发布文件的内容,可能有人能够提供一种解决方案,它可以获取您想要的值,而无需首先为
str
定义值。
set "new=%str:*"=%