2017-08-12 61 views
-1

我是新來的Perl。我正在編寫腳本以從Windows命令「systeminfo」打印系統引導時間信息。這裏看起來有些問題。我得到這樣的輸出。有人能幫助我嗎?寫一個命令輸出到一個文件並匹配一個字符串

use strict; 
    use warnings; 
    my $filename = 'sysinfo.txt'; 
    my @cmdout = `systeminfo`; 
    open(my $cmd, '>', $filename) or die "Could not open file '$filename' $!"; 
    print $cmd @cmdout; 
    foreach my $file (@cmdout) { 
     open my $cmd, '<:encoding(UTF-8)', $file or die; 
     while (my $line = <$cmd>) { 
      if ($line =~ m/.*System Boot.*/i) { 
       print $line; 
      } 
     } 
    } 

輸出:死在perl_sysboottime.pl線8

+1

你想幹什麼通過調用'打開我的$ CMD, '<:編碼(UTF-8)' 做,$ file'?顯然該文件不存在。 – aristotll

回答

2

作爲由打印的錯誤指示,腳本是死於第一次它執行

open my $cmd, '<:encoding(UTF-8)', $file or die; 

這意味着open未能打開一個文件。

我對Windows的命令並不熟悉,但我會以systeminfo爲例給出here的輸出結果。

執行第4行後,將陣列@cmdout包含由systeminfo輸出的行。當執行第8行時,$file已被設置爲輸出的第一行,或Host Name: COMPUTERHOPE\n(注意結尾的換行符)。這不是一個文件名,所以open失敗。

它看起來像你試圖通過一個文件的行迭代的兩種不同的方式,另一個裏面一個結合。嘗試是這樣的:

foreach my $line (@cmdout) { 
    if ($line =~ m/.*System Boot.*/i) { 
     print $line; 
    } 
} 
+0

這個工作非常感謝 – user3834663

相關問題