2011-07-26 8 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 

そして、ここでは、ドライブが

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) 

「XLC」と「XLE」引数は、ドライブを選択するためのもので暗号化されているとき、あなたが得るものですが出力されます。暗号化されていないドライブでは、「メディアタイプ:」と「プレーン - 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 

は今、私の思考プロセスは、第三、第四、リスト内の5番目のトークンを取り、ある(私が興味のラインのために、第一のトークンは "になります2番目は「タイプ:」、3番目、4番目、5番目は「プレーン」「ノット」と「SGN」、「SGN」は「完全に」暗号化されている)文字列は "Plain-notSGN"(すべての文字列を連結するだけ)と等しくなります。ただし、これは機能しません。助言がありますか?

答えて

1

FINDのようなユーティリティを関与させることにより、@Mechaflash本当にいいアイデアです。しかし、この状況では、FORループと一緒に使うのはちょっと残念です。ここで

はあなたがループなしFINDを使用することができます方法は次のとおりです。

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

/Iスイッチは単にキーフレーズを検索しながらケースを無視するFINDを伝え、>NULビットはFINDの出力を破棄します。 2つの演算子&&||は、最後に実行されたコマンドの結果に応じて実行の流れを制御します。この場合、FINDです。 &&以降のコマンドは、論理結果が「成功」の場合は実行され、論理「失敗」の場合は||以降のコマンドが実行されます。

もちろん、ECHOの代わりにGOTOコマンドを使用できます。

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

:NotEncr 
… 

:Encr 
… 

また、あなただけ&&のみ||使用することができます。

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

:NotEncr 
… 
+0

巧妙だということを。見たことがない&&と||前に一緒に使用されます。私は私のバッチスクリプトのいくつかに変更を加えるつもりだと思う= 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 
関連する問題