2009-08-17 13 views
0

質問:テキストファイル内の行を検索し、その間のテキストを確認しますか?バッチ/ Windowsの/ CMDについて

私は私のバッチファイルは行を検索することができます(私はすでに達成したが、何が次に来るではない)ことを希望、それは次のようになります。

<name>MyName</name> 

名前>と< /名前>の間のテキストを見つける必要があります。その後、それを変数(%name%)として設定する必要があります。

誰にも分かりませんか?

EDIT:誰かが回答を求めている場合は、コードを記載してください。 PerlはOKですが、これはオープンソースでなければならず、誰もがPerlを持っているわけではありません。

+0

コードのようなテキストをバッククォート( '' '文字)で囲むと、そのまま入力することができます。これにより混乱を避けることができます - 山括弧をかっこで置き換えていることを確認するために、あなたの質問を数回読まなければなりませんでした。 –

答えて

3

(あなたの入力と仮定すると、ファイルに「test1.html」です)この方法を行うことができます。

findstr "<name>" test1.html > temp1.lis 
FOR /F "tokens=2 delims=>" %%i in (temp1.lis) do @echo %%i > temp2.lis 
FOR /F "tokens=1 delims=<" %%i in (temp2.lis) do @echo %%i > temp3.lis 

最初の行はそれだけでHTML/XMLタグガードである 「名前は」に一致します2つのFORライン( はすでにこれを行っているかもしれません)。結果は一時ファイル "temp1.lis"に保存されます。

2行目は最初の ">"の右側にあるものをキャプチャします。実際には "< name>"の後に何が表示されますか。この段階で "MyName </name"は一時ファイル "temp2.​​lis"に残されます( として、終了タグにも ">"が含まれます)。これがBATファイルにあるので、ダブル "%"は (%% i)に注意してください(コマンドラインから直接 をテストしたい場合は "%"だけにしてください)。

第回線捕捉何が最初の「<」 の左側にされている - これは望ましい結果である:「MYNAME」は( 「MYNAME < /名前」の「<」のままです)。結果は変数%% iにあり、 は%% iをパラメータとする関数を呼び出し、その関数の 結果にアクセスできます(関数 の上のFOR行は組み込みの「エコー」であり結果これ


<name>MyName</name> 

は、最初のHTML/XMLタグであれば上記にのみ機能することに注意してください)標準 出力のリダイレクトによって 一時ファイル「temp3.lis」で終わりましたライン。

代わりに、最初のFOR行(その が最初のパラメータとして受け取る)で関数を呼び出すことができます。その機能は次に "< name>"の代わりに という文字が入力されていることを示します。:

set RLINE=%MYLINE:<name>=£% 

説明:入力ラインが変数%マイラインの%である場合、 「<名>」「£」に置き換えることになり、結果が変数%RLINE%が割り当て あろう。

置換の理由は、 FORループの区切り文字が1文字のみであるためです。

次に、(「> <名」の右に が何であるかを抽出する - 以前のように)FORループでの区切り文字として「£」を使用することができます。

echo %RLINE%>temp5.lis 
FOR /F "tokens=2 delims=£" %%i in (temp5.lis) do @echo %%i > temp6.lis 

あなたはこれを繰り返す必要があり"</name>" (但し、<の名前> MyName </name>が の行の最初のHTML/XMLタグでない場合のみ)。

あなたが見るように、それは可能ですが、かなり痛いです。

+0

あなたは最初の行が...だが、findstrを使用して保留文書を検索している場合には、上記はうまく動作すると言いますか? –

+0

いいえ、最初の行ではありません。 1行目の最初のタグ。ある行に "関連のないコンテンツがいくつかの単語" MyName "を含んでいた場合、比較的シンプルな最初の解決法は機能しません。 –

+0

あなたの質問にいくつかのサンプル入力をリストできますか? –

0

Perlを学んでください。それはちょうどそのようなもののために作られています。

+0

これで2つの問題があります。 http://blogs.msdn.com/oldnewthing/archive/2006/03/22/558007.aspx – RossFabricant

+0

実際、Perlはテキストファイルを操作するのに最適です。あなたの冗談に加えてみましょう。コンピュータを使うだけで、2つの問題が生じます。ブラウザを開いてSOに質問を入力すると、2つの問題が発生します。あなたが良いツールを使用する方法を学びたくない場合は、何かを達成する幸運。 – mcandre

+0

あなたが与えてくれるリンクはちょっと古いものです...あなたの言うことを「基本です」と知っています...しかし、私にチュートリアルをしたいのなら、もっと最新のものを教えてください。 。しかし、とにかくありがとう。 –

関連する問題