Отображение всех строк после определенной строки в текстовом файле с использованием Пакет - PullRequest
1 голос
/ 10 января 2012

Это мой код.

@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, если вы видите файл системной информации в конце сетиДетали карты отображаются.Но с этим кодом я получаю только первую строку.

Actual SystemInfo:

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.

Ответы [ 3 ]

2 голосов
/ 14 января 2012

Вот и мы:

@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

Если вы точно знаете, что когда-либо будет ОДНА сетевая карта (сетевая карта), вы можете удалить ' & goto Остаток ' в конце оператора FOR и удалить ярлык ': остаток '.

1 голос
/ 10 января 2012

Невозможно делать то, что вы хотите, используя только «findstr», потому что вам нужно выбрать строки в зависимости от их контекста (т.е. строки с отступом, следующие за первой сетевой картой). Это тривиально, используя perl, awk, ruby ​​или другие скриптовые языки.

Думая о способе делать то, что вы хотите, только с Windows, я подумал о Javascript. Имейте в виду, что Javascript - это не моя сильная сторона, и, вероятно, это можно сделать лучше, но, если вы хотите, чтобы все строки после «Карт NetWork» работали, это должно работать:

поместите это в файл (например: 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 голосов
/ 10 января 2012

совпадение строки ограничено одной строкой (то есть между возвратом каретки).поэтому вам нужно будет добавить отсутствующие идентификаторы в список строк поиска.

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

вы заметите, что это также принесет дополнительную информацию о вашем процессоре, потому что [01] там тоже совпадает.если вы думаете, что в коробке может быть более одного ника, вы также можете искать [02].

если вы хотите выполнять поиск только тогда, когда он там, вам нужно будет использовать первый запуск вывода systeminfo в качестве входных данных для другого поискового файла.например, при первом запуске выводит вам 1 NIC(s) Installed или 2 NIC(s) Installed Затем вам нужно будет проанализировать это с помощью цикла for и сопоставления символов, чтобы получить точное число установленных nics, а затем снова выполнить поиск по systeminfo, используя это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...