Ruby的ARGV在Windows上可能是空的,具体取决于运行脚本的方式

ale*_*2k8 6 ruby argv

我的demo.rb:

puts ARGV.size

ARGV.each do |a|
  puts "Argument: #{a}"
end
Run Code Online (Sandbox Code Playgroud)

结果取决于我们如何运行脚本:

> demo.rb foo bar
0

> ruby demo.rb foo bar
2
Argument: foo
Argument: bar
Run Code Online (Sandbox Code Playgroud)

为什么会这样?这可以做一些事情吗?

编辑: 感谢所有回复!在这里我的设置:

>assoc .rb
.rb=rbFile

>ftype rbFile
rbFile="c:\ruby-1.8.6\bin\ruby.exe" "%1" %*
Run Code Online (Sandbox Code Playgroud)

所以看起来是正确的.

但我发现了

>demo.rb foo bar
Run Code Online (Sandbox Code Playgroud)

使用这样的命令行启动进程:

"C:\ruby-1.8.7\bin\ruby.exe" "c:\demo.rb"
Run Code Online (Sandbox Code Playgroud)

请注意,.rb与1.8.6相关联,但1.8.7已启动.

所以我猜其他的东西搞砸了?

Jon*_*röm 8

打开命令窗口:

assoc .rb
Run Code Online (Sandbox Code Playgroud)

它是rbFile吗?

ftype rbFile
Run Code Online (Sandbox Code Playgroud)

确保Ruby.exe后跟"%1"%*

%*有时会丢失.


EBG*_*een 2

检查文件关联。特别是在高级设置中查看“打开”操作。确保操作末尾有一个 %*。

这个问题是关于 powershell 的,但本质上是同一个问题,所以我的回答应该提供更多细节。