2009-12-06 76 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