2012-01-09 79 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 

我如何获得缺少什么?顺便说一句,有谁知道为什么BIOS显示为'DELL - 15'?这只是与XP。

+2

您可能希望下次在发布之前清理数据。你只是给了你的外部域名,以及缺少100多个修补程序的个人电脑的内部IP。 – brandong 2012-01-10 17:22:52

回答

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]也在那里。如果你认为一个盒子可能有多个nic,你也可以搜索[02]。

如果你只想在它存在的时候搜索它,那么你将需要使用第一次运行的systeminfo输出作为另一个搜索文件的输入。例如第一次运行输出会告诉你1 NIC(s) Installed2 NIC(s) Installed然后,你需要用for循环和字符匹配来解析,以获得安装的确切数量的nics,然后再使用它搜索systeminfo。

+0

我不认为这就是他想要的。他要求在文本文件中提取“在特定行之后”的所有行。 – theglauber 2012-01-10 17:28:04

+0

@theglauber他问:“我如何得到缺少的东西?”这是一个有效的方式,同时保持对findstr的使用。你的方式是使用其他技术的另一种有效方式。 – brandong 2012-01-10 18:13:27

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 

如果您肯定知道,只有永远将是一个NIC(网卡),那么你可以从的末尾删除“&转到其余” 'FOR-statement'并删除标签':其余'。

相关问题