3

我有一个这样的字符串:

Testing:"abc"def"ghi"

我想得到:abc"def"ghi并将其放入变量中,有什么可能的方法吗?

我想要一种通用的方法(第一个和最后一个引号,而不是第一个和第四个引号)

4

1 回答 1

3

只要字符串不包含未引用的特殊字符,这将可靠地工作& | > < ^

@echo off
set str=Testing:"abc"def"ghi"extra
echo str = %str%
set "new=%str:*"=%
echo new = %new%

- 输出 -

str = Testing:"abc"def"ghi"extra
new = abc"def"ghi

解释

这个解决方案有两个部分,都在同一行代码中。

1)删除所有字符到第一个"

这部分使用了变量扩展的文档搜索和替换功能,搜索字符串前有一个星号。HELP SET以下是通过键入或SET /?从命令提示符获得的帮助的摘录。

Environment variable substitution has been enhanced as follows:

    %PATH:str1=str2%

would expand the PATH environment variable, substituting each occurrence
of "str1" in the expanded result with "str2".  "str2" can be the empty
string to effectively delete all occurrences of "str1" from the expanded
output.  "str1" can begin with an asterisk, in which case it will match
everything from the beginning of the expanded output to the first
occurrence of the remaining portion of str1.

2) 查找最后一次出现"的字符串并在该点截断字符串。

整个 SET 赋值表达式可以用引号括起来,并且封闭的引号将被丢弃,最后一个引号之后的所有文本都将被忽略。下面的语句将定义变量var的值为value

set "var=value" this text after the last quote is ignored

如果没有最后一个引号,则该行的整个其余部分都包含在该值中,可能带有隐藏空格。

set "var=This entire sentence is included in the value.

我不知道此功能的任何官方文档,但它是批处理文件开发的重要工具。

此过程发生第 1 部分的扩展完成之后。"因此 SET在扩展值中最后一次出现时截断。

于 2013-02-02T05:24:57.330 回答