HOWTO:WinPEでレターCD / DVDを識別する方法

WAIKを使用して、次のタスク直面しました-実際にWin PEが起動した文字CD / DVDを判別する。 ブログやフォーラムでのいくつかの推奨事項は、Cで短いプログラムを作成し、その完成のためにコードを分析するというものです。これは完全に合理的な実証済みの方法です。



1つの「しかし」:管理タスクでは、スクリプトソリューションを使用することを好みます。コンパイラに縛られていないため、追加のツールを使用せずに、ひざまずいてスクリプトを他のタスクに適応させることができます。 したがって、実験に少し時間を費やして、組み込みツールを使用して必要な結果を得ました。

  1. diskpartユーティリティからシステム内のボリュームに関するデータを取得します
  2. 余分なデザインを除外します
  3. ラベルまたはファイルシステムに基づいて必要なボリュームをリストで見つけます
明らかな複雑さにもかかわらず、コードは短く、普遍的であることが判明しました。たとえば、フラッシュドライブのドライブ文字を決定するために簡単に適応します。



Diskpartは本質的にシェルなので、/ sスイッチを使用してファイルからコマンドのシーケンスを渡す必要があります。 そして、実際のプロジェクトでは、ディスクをパーティション分割するための個別のコマンドファイルを作成しました。 ローカルHDDのレターを受け取り、実際には、起動可能なDVDのレターを受け取ります。 ただし、追加のファイルなしで別のコマンドを完全に実行できます。



エコーリストボリューム| diskpart



出力は次のようになります。
 Microsoft DiskPart、バージョン6.0.6001
 (C)Microsoft Corporation、1999-2007。
コンピューター上:テスト

ディスクパート>
    ボリューム###名前ラベルFSタイプサイズステータス情報
   ---------- --- ----------- ----- ---------- ------- ---- ----- --------
     ボリューム0 E DVD-ROM 0 b摩耗なし          
     ボリューム1 F LRMCFRE_RU_ UDF DVD-ROM 2389 MB正常           
     ボリューム2 C NTFSセクション373 GB保守可能   
     ボリューム3 DデータNTFSセクション373 GBサービス可能
ディスクパート>




一見すると、「タイプ」フィールドで十分です。実際、複数のドライブが存在する可能性があります。ファイルシステムまたはディスクラベルに注目する方が良いでしょう。 ラベルはよりユニークですが、スクリプトは普遍的ではありません。 なぜなら ラベルでは、通常ビルド番号または日付を使用しますが、ファイルシステムに焦点を当てる方が簡単であることがわかりました。 マイナス-2番目のドライブで忘れられたディスクは、予期しない結果を招く可能性があります。



注:出力形式は、コマンドがインタープリターに送信される方法によって異なります。外部コマンドファイルを使用する場合、次の行

ディスクパート>

問題ではありません。



不要な設計と追加データからボリュームのリストをフィルターするには、extended for構文を使用します。 ここでは、ファイルを介して結果を転送するか、コマンドの構文を複雑にすることで選択することもできます。 追加のファイルを使用すると、コードが比較的読みやすくなります。



diskpart / s getvolumes.dp> volumes.txt

for / F“ skip = 7 tokens = 3,5” %% i in(volumes.txt)do if %% j == UDF SET CDDRIVE = %% i



現在のディレクトリが記録を許可していることを確認するだけでよく、おそらくファイルのフルパスを指定します。 しかし、構文が複雑なため、パスと書き込みアクセスの面倒を避けることができます。



for / F“ skip = 8 tokens = 3,5” %% i in( ' echo list volume ^ | diskpart ' )do if %% j == UDF SET CDDRIVE = %% i



実際、これですべてです。1行のコードでブートディスクの文字が返されます。 エラー処理を無視しないでください。変数を使用する前に確認する価値があります。



if-%CDDRIVE%== - gotoエラー



All Articles