插入符在Windows 7中的CMD,我的理解是%〜DP0給出了一個批處理文件的文件夾路徑,如 How to get folder path from file path with CMD在cmd中,如何讓文件夾的路徑與名稱
然而,這不是如果路徑中至少有一個插入符號(^),則不起作用。例如,在C批:\ ^一個^^ 2個^^^ 3 ^^^^ 4插入符\含
echo %~dp0
給出
C:\onetwo^three^four^^carets\
我怎樣才能逃避插入記號?
插入符在Windows 7中的CMD,我的理解是%〜DP0給出了一個批處理文件的文件夾路徑,如 How to get folder path from file path with CMD在cmd中,如何讓文件夾的路徑與名稱
然而,這不是如果路徑中至少有一個插入符號(^),則不起作用。例如,在C批:\ ^一個^^ 2個^^^ 3 ^^^^ 4插入符\含
echo %~dp0
給出
C:\onetwo^three^four^^carets\
我怎樣才能逃避插入記號?
你得到正確的值,但它要經過解析的另一層當你回顯值兼容。未加引號的^
是批轉義字符,用於將特殊字符如&
和|
轉化爲簡單的文字字符。無論任何性格跟隨一個不加引號的脫字符都逃脫了,並且脫掉了字符。
你會得到完全相同的結果,如果你要簡單地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
你試過延時變量擴展嗎?
echo !dp0
我不知道如果它與報價剝離〜
+1好的選項列表 –
+1的詳細解釋和例子。 「echo!myPath!」解決方案正確。其他的都用引號將字符串括起來。 – Gnubie
@Gnubie - 哎呀,謝謝!我最後一個例子中的'〜'錯過了引號。現在全部修好了。 – dbenham