Variables 替换";%&引用;在变量中
问题很简单,还没有解决方案:Variables 替换";%&引用;在变量中,variables,batch-file,Variables,Batch File,问题很简单,还没有解决方案: C:\> Set var=^%test^% C:\> Echo %var% %test% C:\> Echo %var:^%=-% %test% C:\> Why is this not producing -test-? 我试着加倍并移除胡萝卜(^),但收效甚微。任何建议(或解决方案)均受欢迎 蒙纳 这应该有效…%%批处理文件中的not^%转义%。在批处理文件中,^%实际上是在%后面转义字符,在本例中是换行符。使用SET search
C:\> Set var=^%test^%
C:\> Echo %var%
%test%
C:\> Echo %var:^%=-%
%test%
C:\> Why is this not producing -test-?
我试着加倍并移除胡萝卜(^
),但收效甚微。任何建议(或解决方案)均受欢迎
蒙纳
这应该有效…%%批处理文件中的not^%转义%。在批处理文件中,^%实际上是在%后面转义字符,在本例中是换行符。使用SET search and replace替换
%
的唯一方法是使用延迟扩展。不可能以允许使用正常扩展的方式逃逸%
%
的规则在批处理和命令提示中是不同的
在批处理脚本中,%
通过加倍进行转义:
@echo off
setlocal enableDelayedExpansion
set "var=%%test%%"
set var
set "var=!var:%%=-!"
set var
--输出--
从命令提示符下,实际上无法转义%
。如果括在引号内的文本不等于变量名,则保留百分比。此外,还保留了未配对的百分比。下面的代码假设变量test
不存在:
C:\test>cmd /v:on
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\test>set "var=%test%"
C:\test>set var
var=%test%
C:\test>set "var=!var:%=-!"
C:\test>set var
var=-test-
C:\test>
如果变量test
确实存在,则您可以使用以下方法设置初始var
值:
c:\test>set "var=%^test%"
var=%test%
插入符号“转义”下一个字符,因此它被使用,留下正确的值。它可以放在百分比范围内的任何位置。但代码假定变量^test
不存在。如果它这样做了,那么它将简单地扩展该值,如下所示:
C:\test>set "^test=Hello world"
C:\test>set ^^
^test=Hello world
C:\test>set "var=%^test%"
C:\test>set var
var=Hello world
C:\test>
^%实际上是在%后面转义字符,在本例中是换行符
-这是错误的^%test^%
,第二个插入符号将用作变量名的一部分test^
,并且在扩展变量后(或者在本例中,完整部分将保持不变)两个插入符号均转义以下字符,在这两种情况下都是百分号,不会产生任何进一步的效果。请尝试将行设置为a=^%test^%
,然后再行hello world
,a将设置为hello world
。
c:\test>set "var=%^test%"
var=%test%
C:\test>set "^test=Hello world"
C:\test>set ^^
^test=Hello world
C:\test>set "var=%^test%"
C:\test>set var
var=Hello world
C:\test>