1

你能告诉我为什么这段代码会出错吗?

我不明白这一行:File.new("#{line}", "w")

system "ipconfig /all > info.txt"
info_text = File.open("info.txt")
info_text.each { |line|
  if line =~ /Physical Address/
    line.slice! "   Physical Address. . . . . . . . . : "
    File.new("#{line}", "w")
  end
}

谢谢-迈克·W

4

1 回答 1

0

该代码旨在在 Microsoft Windows 上运行。该脚本不会在其他操作系统上做任何有用的事情。特别是,它会尝试使用 MAC 地址为系统上的每个网络适配器创建一个空文件。

它很可能line包含 Windows 不允许在文件名中使用的字符。(Windows 比 Linux 或 Mac OS X 更具限制性。)您遇到了什么错误?

此外,请尝试在调用之前立即打印line变量File.new以查看它包含的内容。

您可能需要line通过删除无效字符来进行清理。有关不允许的内容,请参阅此答案。简单的方法是使用简单的白名单:

# remove non-alphanumeric and non-underscore
line.gsub!(/\W/, '')

我怀疑这是导致错误的换行符。

更新:

我在 Windows 上进行了测试,确实是回车 ( \r) 和换行 ( \n) 导致了问题。我明白了Errno::EINVAL: Invalid argument

这应该通过删除所有空格来解决它:

line.gsub!(/[\s]/, '')
于 2012-09-07T21:45:30.280 回答