2012-10-10 51 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' –

相關問題