在 .bat 文件中,"rem" 注释导致 "25 was unexpected at this time" 错误。

4
这很奇怪吗?.bat的rem命令是否有某种转义码?
file.bat:
rem https://sourceforge.net/p/jedit/bugs/4084/?limit=25

运行它:

C:\Users\admin>file.bat
25 was unexpected at this time.

C:\Users\admin>https://sourceforge.net/p/jedit/bugs/4084/?limit=25

我没有看到任何错误级别。


1
不算太奇怪。rem 命令有参数,嗯,只有一个,那就是 /? - Gerhard
@Gerhard 是的,我刚刚缩小了范围。我在注释中放置了一个网址,导致我有些困惑。 - js2010
啊,是的,我看到了编辑。那么我会给你提供一个链接,展示cmd如何解释脚本。 - Gerhard
这里有一个链接,应该会帮助你理解,我本可以解释,但如果已经有人做过了,为什么要重复呢 :) - Gerhard
@Gerhard 谢谢。我把原始网页链接放回去了,以展示它有多么令人困惑。 - js2010
1
是的,消除它的一种方法,因为它是一个“rem”ark,就是将其用双引号括起来。rem "https://sourceforge.net/p/jedit/bugs/4084/?limit=25" - Gerhard
2个回答

5
rem 命令支持一个参数,即 /?,并且它对此非常贪婪。你的 URL 中包含了该字符串。 = 是标准的分隔符(就像 SPACETAB,; 一样),因此余下的部分似乎被解释为另一个(无效的)命令。
把备注文本放在引号中可以帮助解决这个问题,因为这样就不会再检测到 /? 了。
rem "https://sourceforge.net/p/jedit/bugs/4084/?limit=25"

当你写下这段代码:

rem/ https://sourceforge.net/p/jedit/bugs/4084/?limit=25

现在已经不再检测 /? 部分了。但是,像 &, <, >, |, () 这样的特殊字符会被识别。


另一种选择是使用::风格的注释,它实际上是一个无效的标签(标签以:开头,请参见goto /?call /?):

:: https://sourceforge.net/p/jedit/bugs/4084/?limit=25

特殊字符在这里不是问题,但不能在括号内的代码块中使用。

0

哦,那很奇怪。Rem是一个常规命令,可以通过/?来获取帮助,即使/?被嵌在另一个字符串中。我被告知将地址放在双引号中可以解决这个问题。

C:\Users\admin>rem /?
Records comments (remarks) in a batch file or CONFIG.SYS.

REM [comment]

或者去掉25后,整个字符串也会得到相同的结果:

rem https://sourceforge.net/p/jedit/bugs/4084/?limit=

Records comments (remarks) in a batch file or CONFIG.SYS.

REM [comment]

将不是“rem”标记的内容放入双引号中是标准做法。尝试去掉“rem”,并使用包含其他可能有问题字符(如&)的URL,然后将URL放在双引号中,看看有什么区别。 - Compo
@Compo & 在 Windows 10 1909 中似乎没有任何作用。 - js2010
由于您显然没有以我预期的方式接受我的先前评论,因此请问当您以相同方式(而不是备注)使用此特定字符串时会发生什么情况,例如 start https://swisscows.com/web?query=Ben & Jerry's。您是否会因为“&”符号而收到错误消息,并且是否会得到“Ben”或“Ben&Jerry's”的浏览器结果页面?现在,由于您的字符串只是用于阅读的文本,所以绝对没有理由不将其用双引号括起来,这样的格式不会使任何读者感到困惑,如 rem "https://sourceforge.net/p/jedit/bugs/4084/?limit=" - Compo
@compo 我错了,我以为你是指在一个rem语句中。 - js2010

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接