Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
Variables 替换";%&引用;在变量中_Variables_Batch File - Fatal编程技术网

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>