2014-05-24 2 views
0

원격 컴퓨터를 쿼리하고 KB22334358이 systeminfo 출력에 있으면 종료하고 그렇지 않으면 failed.txt에 호스트 이름을 쓰십시오.IF 조건 사용

왜 작동하지 않습니까?

systeminfo /s "remotenamemachine" | find "KB22334358" 
if %errorlevel% equ 1 goto nome else goto exit 
:nome 
systeminfo | find "Nome host" > C:\failed.txt 
:exit 
exit 
+0

'Nome host '는'systeminfo'의 출력에 나타나야합니까? – usr2564301

+0

참고 : 내 질문에 대한 가능한 대답은 'yes'입니다. * iff * 'system info'의 출력이 지역화 된 버전의 Windows 용으로 번역됩니다. 내 시스템이 영어로되어 있기 때문에 쉽게 확인할 수 없습니다. – usr2564301

+1

어떤 호스트의 이름을 기록 하시겠습니까? 원격 컴퓨터의 이름이나 배치 파일을 실행하고있는 이름입니까? –

답변

0

다음 번에 연결할 때 /s 스위치를 사용해야 할 수도 있습니다. 또한 /i을 사용하여 find 명령에서 대소 문자를 구분하지 않을 수도 있습니다.

systeminfo /s "remotenamemachine" | find "KB22334358" 
if %errorlevel% equ 1 goto nome else goto exit 
:nome 
systeminfo /s "remotenamemachine" | find /i "Nome host" >> C:\failed.txt 
:exit 
exit 

또는 당신은 한 번에 모든 것을 얻을이 트리플 for /f 루프를 사용할 수 있습니다 : 당신은 또한 지금처럼 failed.txt 파일에 추가 할 수 있습니다

KB_Checker.bat

@echo off 
setlocal ENABLEDELAYEDEXPANSION 
set comp_name=%* 

for /f "usebackq tokens=1* delims=" %%I in (` 
    systeminfo /s "%comp_name%" 
`) do (
    for /f "usebackq tokens=2 delims=:" %%k in (` 
     echo %%I ^| findstr /v "^)" ^| findstr "KB22334358" 
    `) do (
     for /f "tokens=1* delims=" %%f in (' 
      echo %%k ^| findstr /v "UTC" 
     ') do (
      set temp_KB=%%f 
     ) 
    ) 

    for /f "usebackq tokens=2 delims=:" %%h in (` 
     echo %%I ^| findstr /i /C:"Nome host" 
    `) do (
     for /f "tokens=1* delims=" %%f in (' 
      echo %%h ^| findstr /v "UTC" 
     ') do (
      set hm=%%f 
     ) 
    ) 
) 2> nul 

set KB=!temp_KB! 
if not defined KB echo !hm! >> C:\failed.txt 
exit 

UPDATE

위의 스크립트를 업데이트하여 comp_name 환경 변수를 설정하십시오. var. 다음과 같이 스크립트에 컴퓨터 이름을 전달할 수 있습니다 : KB_Checker.bat computer_1 그러면 처리 할 것입니다

+0

와우, 고마워 !!!!!!! – FREDDIE

+0

마지막 스크립트에 쿼리 할 시스템 이름 목록을 통합하는 방법을 알고 있습니까? – FREDDIE

+0

컴퓨터 이름을 스크립트/함수에 전달하거나 텍스트 파일에 시스템 이름 목록을 넣을 수 있습니다. – Alex