从另一个文本文件的行创建新文件(名称)

时间:2012-09-07 21:24:50

标签: ruby file filenames

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

我不理解这一行: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
}

谢谢-Mike W

1 个答案:

答案 0 :(得分:0)

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

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

另外,请在调用line之前立即打印File.new变量,以查看其中包含的内容。

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

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

我怀疑这是造成错误的换行符。

更新:

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

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

line.gsub!(/[\s]/, '')