2009-12-06 87 views
17

我在我的批處理文件中有一個變量,它包含管道符號(這一個:|),所以當我回顯變量時,我得到一個關於無法識別的內部/外部命令的錯誤。批次回聲管道符號導致意外行爲

我需要一種方法來讓它正確迴應它或更好,但刪除一切後,幷包括|符號以及之前的任何額外空間。

回答

32

有在Windows批處理文件中使用時通常必須進行轉義一些特殊字符。以下是部分列表:< > & |^%

轉義字符是^。因此,要獲得一個文字|,你應該這樣做:

echo ^| 

當特殊字符是一個變量,它變得有點困難。但是如果你使用特殊的語法,你可以在這樣的變量替換字符:

set X=A^|B 

REM replace pipe character with underscore 
set Y=%X:|=_% 

echo %Y% 
REM prints "A_B" 
+2

如果您正在處理來自用戶/用戶系統的文件系統路徑,幾乎不可能正確地將您的方式轉換爲無特殊字符的東西。 (文件名可以包含%,!,^等) – Anders 2009-12-07 19:15:59

+0

需要注意的是,執行^%不起作用,因爲%es需要用另一個%進行轉義(即使用%%)。 – Keen 2012-07-30 21:10:58

2

逃避它

echo \| 

或用引號括

echo "|" 
+0

我不能逃脫它作爲變量從另一個命令傳來,報價工作雖然...爲什麼沒有我之前想象的那... 我們看到,如果我能將所有不需要的數據刪除,而不是... – Hintswen 2009-12-06 10:34:23

+0

儘管如此,引號引起報價輸出。 – Joey 2009-12-06 12:03:27

+0

我寫這個的時候我其實是在想unix,所以很失敗! – 2009-12-06 12:34:42

3

必須逃脫|打印變種之前的字符。下面的打印A | B

@echo off 

set x=a^|b 
echo %x:|=^|% 
+0

非常感謝 - 這是針對問題「輸出變量(可能會包含管道)」的唯一「真正的」解決方案 - 實際上,「安全」腳本可能應該始終這樣做。 – 2017-07-24 14:00:48