【问题标题】:Passing arguments with parentheses to Scala script contained in windows batch file将带括号的参数传递给 Windows 批处理文件中包含的 Scala 脚本
【发布时间】:2011-05-25 20:49:12
【问题描述】:

我想将一些 Scala 脚本放入一个批处理文件中。如果你只是打印参数,规范的方式是这样的:

::#!
@echo off
scala %0 %*
goto :eof
::!#
args foreach println

(这实际上调用了另一个批处理脚本,Scala 的 bin 目录中的 scala.bat)。如果我尝试将包含括号的参数传递给它,Windows 命令行解释器会报错语法错误:

printargs.bat "foo(bar)baz"

奇怪的是,如果我创建一个仅包含 args foreach println 的 scala 文件 printargs.scala,则它可以正常工作:

scala printargs.scala "foo(bar)baz"

所以我认为这不是scala.bat 中的错误。但是我能做什么呢?

更新:实际错误发生在scala.bat中的以下行:

set _ARGS=%*

带有错误信息

baz was unexpected at this time

如果我将scala.bat 更改为不使用局部变量而是直接使用 %*,则它可以正常工作。所以我filed a bug-report。在修复错误之前,是否有解决此问题的方法仍然存在问题。

【问题讨论】:

  • 你应该添加scala.bat的代码,这样我们才能看到问题
  • 请发布错误信息。
  • D:\Download>printargs foo(bar)baz => baz was unexpected at this time。当我引用“foo(bar)baz”时没有错误。如果来自 scala.bat 的消息,它是 Scala 的 bin/ 目录中的真实消息。它似乎与结束括号 ')' 字符有关。
  • Scala.bat:code.google.com/p/lighttexteditor/source/browse/trunk/… 设置@echo 并没有透露太多,因为 CLI(cmd.exe?)执行和解析似乎不同步。在文件中添加任何暂停等都会使其不稳定。

标签: windows shell scala command-line batch-file


【解决方案1】:

这个错误不会出现在 scala 2.8.1.final 中。 我建议改用那个版本。

【讨论】:

  • 那是我正在使用的版本。奇怪的是,当我再次尝试时,它工作正常 - 不知道为什么。 8-{ 但似乎至少 Frayser 在 cmets 中的问题也可以重现该问题。
【解决方案2】:

我认为这与 Scala 没有任何关系。我目前在将包含括号的参数传递给 grails 命令时遇到同样的问题。显然这是windows shell的问题,尝试转义字符“(”但不起作用:/

【讨论】:

  • 是的,windows shell 已经坏掉了。但是正如问题中提到的那样,scala 可以在 scala.bat 中使用一种解决方法,以便它可以正常工作。也许 grails 也可以更改启动脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 2011-10-04
  • 1970-01-01
相关资源
最近更新 更多