我有一个字符串
<?define customGUID= "DA7C36F0-A749-4CC5-9575-398C06039325"?>
我正试图把DA7C36F0-A749-4CC5-9575-398C06039325
从这条线上删掉。
首先,我试图在一个变量中设置这个字符串,但我无法做到这一点,可能是因为字符串中的<
和?
,我尝试了:
set "var=<?define customGUID= "DA7C36F0-A749-4CC5-9575-398C06039325"?>"
但后来我能够在运行时以某种方式获取字符串,现在我有了变量
line=<?define customGUID= "DA7C36F0-A749-4CC5-9575-398C06039325"?>
我不知道如何使用批处理脚本从该变量中仅修剪值,即DA7C36F0-A749-4CC5-9575-398C06039325。
我试着至少用来修剪后缀
set "line=%line:"?>%"
但是,如果出现错误,有人能帮助我们找到更好的方法吗?注:空格包含在字符串中
您可以使用"
作为分隔符来分割字符串,但由于引号用于指定for
循环选项,因此语法看起来与通常略有不同:
@echo off
setlocal enabledelayedexpansion
set "line=<?define customGUID= "DA7C36F0-A749-4CC5-9575-398C06039325"?>"
echo !line!
for /f tokens^=2^ delims^=^" %%A in ("!line!") do set "line=%%A"
echo !line!
您可以使用这个非常简单的技巧:
@echo off
setlocal EnableDelayedExpansion
set "var=<?define customGUID= "DA7C36F0-A749-4CC5-9575-398C06039325"?>"
set "i=0" & set "v0=%var:"=" & set /A i+=1 & set "v!i!=%"
echo Desired string: [%v1%]
如果你想知道这是如何工作的,请删除@echo off
行并仔细查看屏幕上显示的内容。。。
您的命令行:
set "line=%line:"?>%"
没有意义,因为缺少=
符号(指子字符串替换(:
set "line=%line:"?>=%"
为了去掉不需要的前缀,你可以删除第一个引号之前的所有内容:
set "line=%line:*"=%"
然而,只有在删除后缀后这样做时,这才有效,因为您要处理的是不平衡的引号,这与立即变量展开一起是有问题的。如果你想更改顺序,你必须实现转义,以免显示重定向运算符>
(未引用(:
set ^"line=%line:*"=%"
set "line=%line:"?>=%"
为了避免根据输入字符串进行转义,请使用延迟变量展开,如下所示:
set "line=<?define customGUID= "DA7C36F0-A749-4CC5-9575-398C06039325"?>"
set line
rem // First enable delayed expansion:
setlocal EnableDelayedExpansion
rem // Then apply it by replacing `%` with `!`:
set "line=!line:*"=!"
set "line=!line:"?>=!"
set line
rem // This restores the previous state:
endlocal
rem // At this point changes in the variable are no longer available due to localisation:
set line