Batch file 批处理:自动转义特殊字符
据我所知,我需要在回显每个转义字符时转义它们。Batch file 批处理:自动转义特殊字符,batch-file,cmd,escaping,special-characters,Batch File,Cmd,Escaping,Special Characters,据我所知,我需要在回显每个转义字符时转义它们。^方法适用于一些echoes。(应该是:) 但是,当有很多字符需要转义时,^方法将不再有效。所以,我的问题是: 是否有任何方法可以在不“滥发”插入符号的情况下转义所有特殊字符?好的,当要输出的字符串用双引号括起来时,无需通过在最后一个帮助页面上的命令提示窗口中运行cmd/?来转义重定向运算符和帮助输出最后一段中列出的其他特殊字符 但是使用“与ECHO命令联机会导致双引号输出 有几种解决方案 第一种方法是将要输出的字符串指定给环境变量,并使用延迟展开输
^
方法适用于一些echo
es。(应该是:)
但是,当有很多字符需要转义时,^
方法将不再有效。所以,我的问题是:
是否有任何方法可以在不“滥发”插入符号的情况下转义所有特殊字符?好的,当要输出的字符串用双引号括起来时,无需通过在最后一个帮助页面上的命令提示窗口中运行
cmd/?
来转义重定向运算符和帮助输出最后一段中列出的其他特殊字符
但是使用“
与ECHO命令联机会导致双引号输出
有几种解决方案
第一种方法是将要输出的字符串指定给环境变量,并使用延迟展开输出环境变量的值
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "Line=pipe = | and percent sign = %% and exclamation mark ^!"
echo !Line!
set "Line=redirection operators: < and > and >>"
echo !Line!
endlocal
这种解决方案的缺点是:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for %%I in (
"pipe = | and percent sign = %% and exclamation mark !",
"redirection operators: < and > and >>"
) do echo %%~I
endlocal
@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
对于%%I in(
“管道=|和百分号=%%和感叹号!”,
“重定向运算符:<和>和>>”
)做回显%%~I
端部
要输出的行在逗号分隔的双引号字符串列表中指定,以供处理
它有一个很大的优点,就是只有百分号必须转义,而延迟扩展上的附加百分号必须被禁用。但是要输出的字符串不能包含双引号,字符串中的“
除外
谢谢你的贡献
在他的回答中还提供了其他很好的解决方案。正如Mofi所提到的,您可以使用延迟扩展的变量来响应任何内容 还有一些可能的方法 (一)
对于%%G in(“|“,”>\^“,”>),因为我太无聊了,我做了一些测试,发现call
比set”a=
慢两倍,而且call
在文本中用插入符号加上感叹号,对于/l%%p in(1,1100)do for/F%%^”in(““”““”)do(echo%%~“^you&echo%%~”)Line2 |&
不起作用?@SteveFest将第二个回音放在新行中,因为&
不会被解析,但第二个%%~“
将离开引用的上下文
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "Line=pipe = | and percent sign = %% and exclamation mark ^!" & echo !Line!
set "Line=redirection operators: < and > and >>" & echo !Line!
endlocal
@echo off
setlocal EnableExtensions DisableDelayedExpansion
call :PrintLine "pipe = | and percent sign = %%%% and exclamation mark !"
call :PrintLine "redirection operators: < and > and >>"
endlocal
goto :EOF
:PrintLine
set "Line=%~1"
setlocal EnableDelayedExpansion
echo !Line!
endlocal
goto :EOF
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for %%I in (
"pipe = | and percent sign = %% and exclamation mark !",
"redirection operators: < and > and >>"
) do echo %%~I
endlocal
for /F %%^" in ("""") do (
echo %%~"Hello^you
echo %%~"Line2 |&<>
)
%magicEcho% "^!%path%<>" ^%!%<> ^