1

バッチ ファイルの残りの部分を基にするために使用できる比較的単純なバッチ ファイル コマンドを作成するのを手伝ってくれる人がいるかどうか疑問に思っていました。私は多くの製品をサポートするサポート グループで働いていますが、特に、XML 構成ファイルを理解しているのは私だけです。私がやろうとしていることは次のとおりです。これは構成ファイルからの抜粋です。

<!-- FILEDROP SETTINGS -->
  <!-- metadataType = X - XML; F - Flat file; E - embedded in filename; B - embedded PDF with bookmarks  -->
        <add key="metadataType" value="E" />

私がやろうとしているのは、ユーザーが実行できる GUI (バッチ ファイル) を作成することです。バッチ ファイルを実行すると、ユーザーは検索するファイルの名前を入力するよう求められます。この例では、ファイル名は importer.config です。バッチファイルで文字列を検索したい

<add key="metadataType" value="E" />

この場合、引用符「E」の間の値を取得し、DOS ウィンドウに何かを出力して、このコンポーネントがファイル名に埋め込まれたメタデータを使用していることをユーザーに知らせたいと思います。もちろん、値が F の場合、このコンポーネントはフラット ファイルのメタデータを使用します....ユーザーにこの大きな大きな構成ファイルを検索させるのではなく、ユーザーにそれを詳しく説明しようとしています。どこを見るべきか知っているようです。

これは私のコードの残りの部分がユーザーに値を表示するための基礎になるため、助けることができる人は誰でも非常に大きな助けになります。正規表現とFINDSTRを使用するのが最善かもしれないと思っていましたが、多くのことを試しましたが、うまくいきません

何かのようなもの:(?<=<add key="metadataType" value=")\w

これは、必要な文字列を探し、それに続く値 (この場合は E) を取得します...これを保存する場所を書き出す方法や、別のものに出力する方法がわかりません....どんな助けでもいただければ幸いです。

4

1 に答える 1

2

FINDSTR の正規表現サポートは非​​常に制限されており、従来の実装で慣れ​​ていたようには機能しません。help findstr入力するかfindstr /?、コマンド ウィンドウからドキュメントを読みます。また、Windows FINDSTR コマンドの文書化されていない機能と制限事項は何ですか?もお読みになることをお勧めします。. 正規表現の奇妙さの説明は、回答の下部にあります。

awk、grep、sed、perl などの Windows バージョンをダウンロードして使用できます。または、VBScript または JScript を使用することもできます。

XML をネイティブ バッチで解析するのは悪夢です。次のようなものを試すことができます。あまり堅牢ではありませんが、ほとんどの場合に機能します。

@echo off
setlocal enableDelayedExpansion
for /f "delims=" %%A in ('findstr /rc:"\<add key=[\"\"]metadataType[\"\"] value=[\"\"]" "fileName.txt"') do set "ln=%%A"
set ^"ln=!ln:*"metadataType" value=!"
for /f delims^=^=^" %%A in ("!ln!") do set value=%%A
echo value=!value!
于 2012-07-10T05:09:44.143 に答える