2012-01-09 3 views
1

これは私のコードです。このコードは何バッチを使用して特定の行の後のすべての行をテキストファイルに表示

@ECHO OFF 
systeminfo > C:\SystemInfo1.txt 

findstr /C:"OS Name:" /C:"OS Version:" /C:"OS Manufacturer:" /C:"Original Install Date:" /C:"System Boot Time:" /C:"System Manufacturer:" /C:"System Model:" /C:"System Type:" /C:"Processor(s):" /C:"System Locale:" /C:"Input Locale:" /C:"Time Zone:" /C:"NetWork Card" C:\SystemInfo1.txt > c:\SystemInfo.txt 

DEL C:\SystemInfo1.txt 

c:\SystemInfo.txt 
EXIT 

を使用すると、ネットワークカードの詳細が表示されている最後に、あなたのシステム情報ファイルを参照してください場合、私は、テキストファイル「Systeminfo1.txt」から必要なだけを表示し、選択したコンテンツです。しかし、このコードでは、私は最初の行だけを取得します。

実際のシステムのシステム情報:

Host Name:     BLRPN0W01085 
OS Name:     Microsoft Windows XP Professional 
OS Version:    5.1.2600 Service Pack 3 Build 2600 
OS Manufacturer:   Microsoft Corporation 
OS Configuration:   Member Workstation 
OS Build Type:    Uniprocessor Free 
Registered Owner:   Admin 
Registered Organization: Thomson Reuters 
Original Install Date:  8/31/2011, 10:46:03 AM 
System Up Time:   0 Days, 10 Hours, 19 Minutes, 2 Seconds 
System Manufacturer:  Dell Inc. 
System Model:    OptiPlex 755     
System type:    X86-based PC 
Processor(s):    1 Processor(s) Installed. 
         [01]: x86 Family 6 Model 23 Stepping 6 GenuineIntel ~2992 Mhz 
BIOS Version:    DELL - 15 
Windows Directory:   C:\WINDOWS 
System Directory:   C:\WINDOWS\system32 
Boot Device:    \Device\HarddiskVolume1 
System Locale:    en-us;English (United States) 
Input Locale:    en-us;English (United States) 
Time Zone:     (GMT) Casablanca 
Total Physical Memory:  2,014 MB 
Available Physical Memory: 772 MB 
Virtual Memory: Max Size: 2,048 MB 
Virtual Memory: Available: 2,008 MB 
Virtual Memory: In Use: 40 MB 
Page File Location(s):  C:\pagefile.sys 
Domain:     tfcorp.tfn.com 
Logon Server:    \\INKABAN1DIR01 
Hotfix(s):     319 Hotfix(s) Installed. 
         [01]: File 1 
         [02]: File 1 
         [03]: File 1 
         [04]: File 1 
         [05]: File 1 
         [06]: File 1 
         [07]: File 1 
         [08]: File 1 
         [09]: File 1 
         [10]: File 1 
         [11]: File 1 
         [12]: File 1 
         [13]: File 1 
         [14]: File 1 
         [15]: File 1 
         [16]: File 1 
         [17]: File 1 
         [18]: File 1 
         [19]: File 1 
         [20]: File 1 
         [21]: File 1 
         [22]: File 1 
         [23]: File 1 
         [24]: File 1 
         [25]: File 1 
         [26]: File 1 
         [27]: File 1 
         [28]: File 1 
         [29]: File 1 
         [30]: File 1 
         [31]: File 1 
         [32]: File 1 
         [33]: File 1 
         [34]: File 1 
         [35]: File 1 
         [36]: File 1 
         [37]: File 1 
         [38]: File 1 
         [39]: File 1 
         [40]: File 1 
         [41]: File 1 
         [42]: File 1 
         [43]: File 1 
         [44]: File 1 
         [45]: File 1 
         [46]: File 1 
         [47]: File 1 
         [48]: File 1 
         [49]: File 1 
         [50]: File 1 
         [51]: File 1 
         [52]: File 1 
         [53]: File 1 
         [54]: File 1 
         [55]: File 1 
         [56]: File 1 
         [57]: File 1 
         [58]: File 1 
         [59]: File 1 
         [60]: File 1 
         [61]: File 1 
         [62]: File 1 
         [63]: File 1 
         [64]: File 1 
         [65]: File 1 
         [66]: File 1 


NetWork Card(s):   1 NIC(s) Installed. 
         [01]: Intel(R) 82566DM-2 Gigabit Network Connection 
           Connection Name: Local Area Connection 
           DHCP Enabled: Yes 
           DHCP Server:  10.136.193.51 
           IP address(es) 
           [01]: 10.136.208.125 

何私のコードが表示されます。

OS Name:     Microsoft Windows XP Professional 
OS Version:    5.1.2600 Service Pack 3 Build 2600 
OS Manufacturer:   Microsoft Corporation 
Original Install Date:  8/31/2011, 10:46:03 AM 
System Manufacturer:  Dell Inc. 
System Model:    OptiPlex 755     
Processor(s):    1 Processor(s) Installed. 
BIOS Version:    DELL - 15 
System Locale:    en-us;English (United States) 
Input Locale:    en-us;English (United States) 
Time Zone:     (GMT) Casablanca 
NetWork Card(s):   1 NIC(s) Installed. 

何が欠落しています。

[01]: Intel(R) 82566DM-2 Gigabit Network Connection 
           Connection Name: Local Area Connection 
           DHCP Enabled: Yes 
           DHCP Server:  10.136.193.51 
           IP address(es) 
           [01]: 10.136.208.125 

私が欠落しているものを手に入れるにはどうすればよいですか? BTWはBIOSが「DELL-15」として表示される理由を知っていますか?これはXPの場合のみです。

+2

投稿する前に次回データを消毒したい場合があります。あなたは外部のドメインと、100以上の修正プログラムがないPCの内部IPを世界に与えただけです。 – brandong

答えて

1

「findstr」のみを使用すると、そのコンテキスト(つまり、最初のネットワークカードに続くインデントされた行)に基づいて行を選択する必要があります。 perl、awk、rubyやその他のスクリプト言語を使って行うのは簡単です。

Windowsのものだけでやりたいことを考えて、私はJavascriptを考えました。 Javascriptは自分の強みではないことに注意してください。これはおそらくもっとうまくいくかもしれませんが、 "NetWork Cards"の後のすべての行が必要であると仮定すると、これはうまくいくはずです:

ファイル(例:filter.js) :バッチファイルから

function processTextStream() { 
    finder = new RegExp("^((OS (Name|Version|Manufacturer))" + 
        "|(Original Install)|(System (Manuf|Model|Locale))" + 
        "|Processor|BIOS|Input Locale|Time Zone" + 
        ")") 
    netcard = new RegExp("^NetWork Card"); 

    printall = false; 

    while (!WScript.StdIn.AtEndOfStream) { 
     line = WScript.StdIn.ReadLine(); 
     if (finder.test(line)) 
     { 
      WScript.echo(line); 
     } 
     else if (netcard.test(line)) 
     { 
      WScript.echo(line); 
      printall = true; 
     } 
     else if (printall) 
     { 
      WScript.echo(line); 
     } 

    } 
} 

// Main script flow 
processTextStream(); 

ザ・は、実行します。

systeminfo | cscript //nologo filter.js >SystemInfo.txt 
0

文字列の一致が一行に制限されている(つまり、キャリッジリターンの間で何)。見つからない識別子を検索文字列のリストに追加する必要があります。

systeminfo | findstr /C:"NetWork Card" /C:"[01]:" /C:"Connection Name:" /C:"DHCP Enabled:" /C:"DHCP Server:" 

[01]もそこにマッチするので、プロセッサに余分な情報があることに気づくでしょう。ボックスに2つ以上のニックがあると思われる場合は、[02]も検索できます。

これがそこにあるときだけこれを検索したいならば、別の検索ファイルの入力としてsysteminfo出力の最初の実行を使う必要があります。例えば、最初の実行出力では1 NIC(s) Installedまたは2 NIC(s) Installedと表示されます。forのループと文字の一致でそれを解析して、正確な数のnicsがインストールされていることを確認してから、再度systeminfoを検索してください。

+0

私は彼が望んでいるとは思わない。彼は、テキストファイル内の "特定の行の後に"すべての行を抽出する方法を求めました。 – theglauber

+0

@theglauber彼は「私は何が失われているのですか?これは、findstrの使用を維持しながら、有効な方法の1つです。あなたのやり方は、他の技術を使った別の有効な方法です。 – brandong

2

ここに私達は行く:

@ECHO OFF 
systeminfo >c:\SystemInfo1.txt 

findstr /C:"OS Name:" /C:"OS Version:" /C:"OS Manufacturer:" /C:"Original Install Date:" /C:"System Boot Time:" /C:"System Manufacturer:" /C:"System Model:" /C:"System Type:" /C:"Processor(s):" /C:"System Locale:" /C:"Input Locale:" /C:"Time Zone:" /C:"NetWork Card" c:\SystemInfo1.txt >c:\SystemInfo.txt 

for /f "tokens=1 delims=:" %%a in ('findstr /n "NetWork Card" c:\SystemInfo1.txt') do set line=%%a & goto remainder 

:remainder 
more +%line% c:\SystemInfo1.txt >>c:\SystemInfo.txt 

DEL C:\SystemInfo1.txt 
c:\SystemInfo.txt 
EXIT /b 

しかONE NIC(ネットワークカード)があるように起こっていることを確認後、あなたはの終わりから「&後藤残り」を削除することができますのためにあなたが知っている場合'FOR-statement'とラベル ':remainder'を削除します。

関連する問題