2012-10-10 49 views

回答

4

你得到正确的值,但它要经过解析的另一层当你回显值兼容。未加引号的^是批转义字符,用于将特殊字符如&|转化为简单的文字字符。无论任何性格跟随一个不加引号的脱字符都逃脱了,并且脱掉了字符。

你会得到完全相同的结果,如果你要简单地echo字符串文字:

echo C:\one^two^^three^^^four^^^^carets\ 

产量

C:\onetwo^three^four^^carets\ 

您可以通过引用串保护插入记号,但你得到您的ECHO结果中的报价为:

echo "%~dp0" 

您可以轻松地将原件值的环境变量,而无需耗费插入符号,并通过使用SET来看看结果证明这一点:

@echo off 
setlocal 
set "myPath=%~dp0" 
set myPath 

如果你想呼应只是不带引号的值,你可以使用延迟扩展。这工作,因为延迟扩展的特殊字符解析后发生:

@echo off 
setlocal enableDelayedExpansion 
set "myPath=%~dp0" 
echo !myPath! 

您还可以通过价值转移到FOR变量得到同样的结果。对于变量扩招后特殊字符的解析也发生:

@echo off 
for %%A in ("%~dp0") do echo %%~A 
+0

+1好的选项列表 –

+0

+1的详细解释和例子。 “echo!myPath!”解决方案正确。其他的都用引号将字符串括起来。 – Gnubie

+0

@Gnubie - 哎呀,谢谢!我最后一个例子中的'〜'错过了引号。现在全部修好了。 – dbenham

0

你试过延时变量扩展吗?

echo !dp0 

我不知道如果它与报价剥离〜

+0

谢谢,但“!回声DP0”或“!回声%DP0”只是给“DP0!”。 – Gnubie

+0

没关系。我在我的手机上,所以我无法测试它。 –

+0

使用短文件名怎么样? '%〜fs0' –

相关问题