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'에서 필요한 만 표시 선택한 내용이다. 그러나이 코드를 사용하면 첫 번째 행만 얻습니다.

실제 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 

은 어떻게받을 수 있나요? 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]도 거기에 일치하므로 프로세서에 대한 추가 정보가 표시됩니다. 상자에 하나 이상의 닉이있을 수 있다고 생각하면 [02]도 검색 할 수 있습니다.

이 때만 검색하려면 다른 검색 파일의 입력으로 systeminfo 출력의 첫 번째 실행을 사용해야합니다. 예를 들어, 첫 번째 실행 출력은 1 NIC(s) Installed 또는 2 NIC(s) Installed을 알려줍니다. 그런 다음 for 루프 및 문자 일치로 구문 분석하여 정확한 nics 수를 얻은 다음이를 사용하여 systeminfo를 다시 검색해야합니다. 여기

+0

나는 그것이 그가 원하는 것이라고 생각하지 않는다. 그는 텍스트 파일에서 "특정 줄 다음"의 모든 줄을 추출하는 방법을 요청했습니다. – theglauber

+0

@theglauber 그는 "내가 누락 된 것을 어떻게 얻습니까?"라고 물었다. 이것은 findstr의 사용을 유지하면서 유효한 방법 중 하나입니다. 당신의 방법은 다른 기술을 사용하는 또 다른 유효한 방법입니다. – 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 

당신은 오직 NIC (네트워크 카드) 다음의 끝에서 '& 고토 나머지'을 제거 할 수 ONE 될 것이 확실히 알고있는 경우 'FOR 문'을 클릭하고 ': remainder'레이블을 제거하십시오.

관련 문제