2011-07-26 2 views
1

그래서 다른 프로그램의 출력에 따라 다른 작업을 수행 할 배치 파일을 만들려고합니다. 기본적으로 첫 번째 프로그램은 하드 드라이브의 암호화 상태에 대한 정보를 출력합니다. 여기에 드라이브가 여기Windows의 FOR/F 루프 문제 해결 일괄 파일

S:\>beinvvol.exe xlc 
------------------------------------------------------------------------ 
BEInvVol, Utimaco Safeware AG - A member of the Sophos Group 
Decommissioning Tool for fully SGN-encrypted Volumes 
------------------------------------------------------------------------ 

&Info: SGN filter driver off 
&Info: Target log-file "S:\BEInvVol.log" 

------------------------------------------------------------------------ 
Listing info for the target volume(s) -command xlc 
Date: 2011-07-26 13:31:01 

[Volume C:] 
Drive Type: DRIVE_FIXED 
[Boot Sector] 
Media Type: Plain -not SGN 
Media Label: 
Media Serial Number: {8C19-DCCD} 
File System: NTFS 
Size: 232.88 GB 

암호화되지 않고 출력은 드라이브가 "XLC '와'XLE"인수

S:\>beinvvol.exe xle 
------------------------------------------------------------------------ 
BEInvVol, Utimaco Safeware AG - A member of the Sophos Group 
Decommissioning Tool for fully SGN-encrypted Volumes 
------------------------------------------------------------------------ 

&Info: SGN filter driver off 
&Info: Target log-file "S:\KeyDestroy\BEInvVol.log" 

------------------------------------------------------------------------ 
Listing info for the target volume(s) -command xle 
Date: 2011-07-26 12:41:48 

[Volume E:] 
Drive Type: DRIVE_FIXED 
[Boot Sector] 
Media Type: SGN -fully encrypted 
SGN Media GUID: {83490018-50C3-B4E3-829E-ACE3B23C86D3} 
File System: NTFS 
Size: 298.09 GB 
[KSA Original] 
Sector Offset ..... 0x0000000000065ED8 (417496) 
Byte Offset ....... 0x000000000CBDB000 (213757952) 
Size in Sectors ... 0x15 (21) 
Size in Bytes ..... 0x2A00 (10752) 
[KSA Backup] 
Sector Offset ..... 0x000000002542D660 (625137248) 
Byte Offset ....... 0x0000004A85ACC000 (320070270976) 
Size in Sectors ... 0x15 (21) 
Size in Bytes ..... 0x2A00 (10752) 

를 암호화 할 때 드라이브를 선택해되어 무엇을 얻을이다. 그래서 암호화되지 않은 드라이브에서 "Media Type :"에 대해 "Plain -Not SGN"이 있고 암호화 된 드라이버의 경우 "SGN- 완전히 암호화 됨"이 표시됩니다.

이제 저는 "Plain -not SGN"이 보일 때 FOR/F 루프를 작성하면 파일의 다른 부분으로 이동합니다. 여기 내 배치 스크립트는 지금까지입니다 :

이제
@ECHO OFF 
::Determine if drive is encrypted 
FOR /F "tokens=3,4,5 delims= " %%A IN ('S:\beinvvol.exe xlc') DO IF /I "%%A%%B%%C"=="Plain-notSGN" GOTO NOTENCRYPTED 

:ENCRYPTED 
ECHO Yes 
GOTO END 

:NOTENCRYPTED 
ECHO No 

:END 

, 내 생각 과정은, 내가 관심이있는 라인에 대한 목록에서 3, 4, 및 5 토큰을 (가지고, 1 토큰이 될 것 " 2 번째는 "Type :"이고, 3, 4, 5 번째는 "Plain" "-not"과 "SGN"또는 "SGN" "-fully" "encrypted"중 하나입니다) 문자열은 "Plain-notSGN"과 같습니다 (모든 문자열을 연결하는 것). 그러나 이것은 작동하지 않습니다. 어떤 제안?

답변

1

FIND 같은 유틸리티를 포함하는 @Mechaflash에 의해 정말 좋은 생각입니다. 그러나이 상황에서 루프를 FOR 루프와 함께 사용하는 것은 약간 과잉이라고 생각합니다. 여기

는 루프없이 FIND을 사용할 수있는 방법은 다음과 같습니다 핵심 문구를 검색하는 동안

beinvvol.exe xlc | FIND /I "Plain -not SGN" >NUL && (ECHO No) || (ECHO Yes) 

/I 스위치가 단순히 사건을 무시 FIND 지시는 >NUL 비트 FIND의 출력을 삭제합니다. 두 연산자 (&&||)는 마지막으로 실행 된 명령의 결과에 따라 실행 흐름을 제어합니다.이 경우에는 FIND입니다. && 이후의 명령은 '성공'의 논리 결과 인 경우 실행되고 논리적 인 '실패'인 경우 || 이후의 명령이 실행됩니다.

물론 ECHO 대신 GOTO 명령을 사용할 수 있습니다. 영리

beinvvol.exe xlc | FIND /I "Plain -not SGN" >NUL && GOTO NotEncr 
:: The following commands are executed in case of an encrypted drive 
… 

:NotEncr 
… 
+0

의 그 :

beinvvol.exe xlc | FIND /I "Plain -not SGN" >NUL && (GOTO NotEncr) || (GOTO Encr) :NotEncr … :Encr … 

또한 만 && 또는 유일한 || 사용할 수 있습니다. 본 적이없는 && 및 || 전에 함께 사용. 나는 내 배치 스크립트 중 일부를 변경하려고한다고 생각한다. D – Mechaflash

+0

고마워,이 버전이 좋아! 또한 설명에 감사드립니다. 방금 배치 파일로 작업하기 시작했습니다. >> >> &&& | || 섞기 쉽다. – romellem

0

시도 :

@Echo off 
::Test the file passed in via command line 
FOR /F "tokens=3,4,5 skip=15" %%G IN (%1) DO IF Plain-notSGN == %%G%%H%%I GOTO NOT_ENCRYPTED 

:ENCRYPTED 
ECHO Yes 
GOTO END 

:NOT_ENCRYPTED 
ECHO No 

:END 

이 먼저 파이프에 필요하거나 텍스트 파일로 유틸리티의 결과를 리디렉션, 그러나 이것은 성공적으로 게시 두 결과를 구분하는 것처럼 보인다 수 있습니다.

1
::Test the file passed in via command line 
FOR /F "usebackq tokens=4" %%G IN (`S:\beinvvol.exe xlc ^| FIND "-not"`) DO (
    IF "%%G"=="-not" GOTO NOT_ENCRYPTED 
) 

:ENCRYPTED 
ECHO Yes 
GOTO END 

:NOT_ENCRYPTED 
ECHO No 

:END