批处理 - 在第一个和最后一个双引号之间获取字符串

时间:2013-02-02 04:11:28

标签: batch-file

我有一个这样的字符串:

Testing:"abc"def"ghi"

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

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

1 个答案:

答案 0 :(得分: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 SETSET /?获得帮助的摘录。

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会在扩展值中最后一次出现"时截断。