如何逃脱在批处理文件&符号?(How do I escape ampersands in batch

2019-06-19 00:01发布

我如何才能使用逃脱一个批处理文件(或从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。

Answer 1:

从一个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


Answer 2:

&用于分隔命令。 因此,你可以使用^逃脱&



Answer 3:

你可以放在引号,如果你提供一个虚拟的第一个参数。

请注意,您需要在这种情况下,提供一个虚拟的第一个参数,如start将把第一个参数作为标题为新的控制台窗口,如果它被引用。 所以下面应该工作(和在这里所做的):

start "" "http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8"


Answer 4:

explorer "http://www.google.com/search?client=opera&rls=...."


Answer 5:

命令

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

简单。



Answer 6:

如果您需要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


Answer 7:

如果你在文件的命名空间你有一个字符,你需要逃脱:

您可以使用单引号和双引号,以避免在命令的任何用词不当。

scp ./'files name with spaces/internal folder with spaces/"text & files stored.txt"' .

^字符,否则脱报价。



文章来源: How do I escape ampersands in batch files?