你能告诉我为什么这段代码会出错吗?
我不理解这一行: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
答案 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]/, '')