Pet*_*sen 135 windows escaping batch-file
如何在批处理文件(或从Windows命令行)中转义&符号,以便使用该start
命令在URL中打开带有&符号的网页?
双引号不适用start
; 这会启动一个新的命令行窗口.
更新1:Wael Dalloul的解决方案有效.此外,如果URL中存在URL编码字符(例如,空格编码为%20)并且它位于批处理文件中,则'%'必须编码为'%%'.在示例中不是这种情况.
例如,从命令行(CMD.EXE
):
start http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8
Run Code Online (Sandbox Code Playgroud)
会导致
http://www.google.com/search?client=opera
Run Code Online (Sandbox Code Playgroud)
在默认浏览器中打开并在命令行窗口中显示以下错误:
'rls' is not recognized as an internal or external command,
operable program or batch file.
'q' is not recognized as an internal or external command,
operable program or batch file.
'sourceid' is not recognized as an internal or external command,
operable program or batch file.
'ie' is not recognized as an internal or external command,
operable program or batch file.
'oe' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)
平台:Windows XP 64位SP2.
Wae*_*oul 141
&
用于分隔命令.因此你可以^
用来逃避&
.
Las*_*sen 79
从一个cmd:
&
像这样逃脱:( ^&
根据@Wael Dalloul的回答)%
不需要逃脱一个例子:
start http://www.google.com/search?client=opera^&rls=en^&q=escape+ampersand%20and%20percentage+in+cmd^&sourceid=opera^&ie=utf-8^&oe=utf-8
Run Code Online (Sandbox Code Playgroud)
从批处理文件
&
像这样逃脱:( ^&
根据@Wael Dalloul的回答)%
像这样转义:( %%
基于OP更新)一个例子:
start http://www.google.com/search?client=opera^&rls=en^&q=escape+ampersand%%20and%%20percentage+in+batch+file^&sourceid=opera^&ie=utf-8^&oe=utf-8
Run Code Online (Sandbox Code Playgroud)
bel*_*bob 28
如果提供虚拟的第一个参数,则可以将其括在引号中.
请注意,在这种情况下,您需要提供一个虚拟的第一个参数start
,如果引用它,则将第一个参数视为新控制台窗口的标题.所以以下应该工作(并在这里):
start "" "http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8"
Run Code Online (Sandbox Code Playgroud)
ada*_*ost 20
explorer "http://www.google.com/search?client=opera&rls=...."
Run Code Online (Sandbox Code Playgroud)
Den*_*owe 12
命令
echo this ^& that
Run Code Online (Sandbox Code Playgroud)
按预期工作,输出
this & that
Run Code Online (Sandbox Code Playgroud)
命令
echo this ^& that > tmp
Run Code Online (Sandbox Code Playgroud)
也可以,将字符串写入文件"tmp".但是,在管道之前
echo this ^& that | clip
Run Code Online (Sandbox Code Playgroud)
^被完全不同地解释.它试图将两个命令"echo this"和"that"的输出写入管道.回声将起作用然后"那"将给出错误.话
echo this ^& echo that | clip
Run Code Online (Sandbox Code Playgroud)
将字符串"this"和"that"放在剪贴板上.
没有^:
echo this & echo that | clip
Run Code Online (Sandbox Code Playgroud)
第一个echo将写入控制台,只有第二个echo的输出将通过管道传输到剪辑(类似于"> tmp"重定向).因此,当重定向输出时,^不引用&而是导致它在重定向之前而不是之后应用.
要管道&,你必须引用它两次
echo this ^^^& that | clip
Run Code Online (Sandbox Code Playgroud)
如果将字符串放在变量中
set m=this ^& that
Run Code Online (Sandbox Code Playgroud)
然后
set m
Run Code Online (Sandbox Code Playgroud)
将输出
m=this & that
Run Code Online (Sandbox Code Playgroud)
但显而易见的
echo %m%
Run Code Online (Sandbox Code Playgroud)
失败是因为,在Windows替换变量后,导致
echo this & that
Run Code Online (Sandbox Code Playgroud)
它将此解析为一个新命令并尝试执行"that".
在批处理文件中,您可以使用延迟扩展:
setlocal enableDelayedExpansion
echo !m!
Run Code Online (Sandbox Code Playgroud)
要输出到管道,我们必须用^&替换变量值中的所有&s,我们可以使用%VAR:FROM = TO%语法:
echo !m:^&=^^^&! | clip
Run Code Online (Sandbox Code Playgroud)
在命令行中,"cmd/v"启用延迟扩展:
cmd /v /c echo !m!
Run Code Online (Sandbox Code Playgroud)
这甚至在写入管道时也有效
cmd /v /c echo !m! | clip
Run Code Online (Sandbox Code Playgroud)
简单.
归档时间: |
|
查看次数: |
104008 次 |
最近记录: |