我如何才能使用逃脱一个批处理文件(或从Windows命令行)&符号start
命令打开网页网址中包含&符号?
双引号不会与工作start
; 这将启动一个新的命令行窗口,而不是。
更新1:瓦埃勒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
将导致
http://www.google.com/search?client=opera
在默认浏览器,并在命令行窗口中的这些错误被打开:
'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.
平台:Windows XP 64位SP2。
从一个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
从一个批处理文件
-
&
是逃脱这样的: ^&
基于@Wael Dalloul的答案 ) -
%
是逃脱这样的: %%
(基于有机磷农药更新)
一个例子:
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
你可以放在引号,如果你提供一个虚拟的第一个参数。
请注意,您需要在这种情况下,提供一个虚拟的第一个参数,如start
将把第一个参数作为标题为新的控制台窗口,如果它被引用。 所以下面应该工作(和在这里所做的):
start "" "http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8"
explorer "http://www.google.com/search?client=opera&rls=...."
命令
echo this ^& that
按预期工作,outputing
this & that
命令
echo this ^& that > tmp
也适用,写入字符串到文件“TMP”。 然而,前管
echo this ^& that | clip
该^解释完全不同。 它尝试写入两个命令的输出“回声此”和“该”到管道。 回声会对你有帮助“认为”会给出一个错误。 话
echo this ^& echo that | clip
将会把字符串“这个”,“那个”剪贴板上。
没有^:
echo this & echo that | clip
第一回声将写入控制台并且仅第二回声的输出将通过管道输送到夹(类似地对于“> TMP”重定向)。 因此,被重定向输出时,该^不引用&反而导致其重定向之前应用,而不是之后。
要管一和,你要引用两次
echo this ^^^& that | clip
如果你把字符串中的变量
set m=this ^& that
然后
set m
将输出
m=this & that
但明显
echo %m%
失败的原因时,Windows替换的变量之后,产生
echo this & that
它分析这是一个新的命令,并尝试执行“那个”。
在一个批处理文件,你可以使用延迟扩展 :
setlocal enableDelayedExpansion
echo !m!
输出到一个管道,我们要替换所有&S与可变值^&,我们可以用%VAR做:FROM = TO%语法:
echo !m:^&=^^^&! | clip
在命令行,“CMD / v的”使延迟扩展:
cmd /v /c echo !m!
写入管道时,这甚至工作
cmd /v /c echo !m! | clip
简单。
如果您需要echo
包含一个符号的字符串,报价也无济于事,因为你会看到他们在输出为好。 在这种情况下,使用for
:
for %a in ("First & Last") do echo %~a
......在一个批处理脚本:
for %%a in ("First & Last") do echo %%~a
要么
for %%a in ("%~1") do echo %%~a
如果你在文件的命名空间,你有一个字符,你需要逃脱:
您可以使用单引号和双引号,以避免在命令的任何用词不当。
scp ./'files name with spaces/internal folder with spaces/"text & files stored.txt"' .
该^
字符,否则脱报价。