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 で実行するように設計されています。このスクリプトは、他の OS では何も役に立ちません。特に、MAC アドレスを使用して、システム上のネットワーク アダプタごとに 1 つの空のファイルを作成しようとします。

lineWindows がファイル名に許可しない文字が含まれている可能性が非常に高いです。(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 に答える