2009-08-18 10 views
0

を見つける:バッチ/ CMD:私は、次が含まれているディレクトリを持っているすべての単一のフォルダファイルmeta.xml

-directory 
-another directory 
    -meta.xml 
-yet another directory 
    -meta.xml 
... 

だから、(すべて、それ自体で、すべてのディレクトリ「meta.xml」で見つける必要がありますだから私はコードですべてのディレクトリに入力する必要はありません)そして、私はすべてのmeta.xmlファイルでコマンドが実行されることを望みます。

これを実行する方法はありますか、これは静かである可能性があります。なぜなら、私が話していたコマンドは、そのmeta.xmlファイルからテキスト行を得て、何をしているのか、このような何かを得る:thatsのない明確な場合

text from meta file 1 
text from meta file 2 
text from meta file 3 

なく

meta.xml found 
text from meta file 1 
meta.xml found 
text from meta file 2 
meta.xml found 
text from meta file 3 

を、単に[OK]を、私はちょうどそれが静かに実行したいとするだろうと思います。 (?/ Q多分)

これは私が話していたコマンドは次のとおりです。

それはあなたが総リスト時にあなたを得るように、一つ一つのmeta.xmlファイルに対してこの操作を行うと、出力を与えるために必要
findstr "<name>" meta.xml >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 

do

type temp3.lis 

ありがとう!

答えて

2

私の知る限り、これは動作するはずです、OK:

findmeta.cmd

@echo off 
for /f "delims=" %%f in ('dir /b /s meta.xml') do (
    FOR /F "tokens=2 delims=>" %%i in ('findstr "<name>" %%f') do @echo %%i > temp2.lis 
    FOR /F "tokens=1 delims=<" %%i in (temp2.lis) do @echo %%i >> temp3.lis 
) 

回答は代わりに置き換えるので、temp3.lisに追加されているので、私はあなたのスクリプト部分を修正それを削除し、最初の一時ファイルの使用を削除しました。最後に、あなたが探していることは
<name> blahblahのように、タグの間で、これまで何で、場合

</name>blahblah一部)

これはさらに速く行う必要があります、何の一時ファイルは必要ありませんし、ループのための1以下が(読みやすくするために複数行に押し入り、それはすべて、必要に応じて、単一の行に保持する。

for /f "delims=" %%f in ('dir /b /s meta.xml') do (
    FOR /F "tokens=2 delims=><" %%i in ('findstr "<name>" %%f') do (
     @echo %%i >> temp3.lis 
    ) 
) 

シングルラインバージョン:あなたが好むどの

for /f "delims=" %%f in ('dir /b /s meta.xml') do FOR /F "tokens=2 delims=><" %%i in ('findstr "<name>" %%f') do @echo %%i >> temp3.lis 

わからない、これはあなたが探しているものであるます。

EDIT:
は、[OK]を私は、私はそれを得たと思うが、私はそれがつもり、すべてを解決していますかわかりません。これが動作するかどうかを確認今

for /f "delims=" %%f in ('dir /b /s meta.xml') do FOR /F "tokens=3 delims=><" %%i in ('findstr "<name>" %%f') do @echo %%i >> temp3.lis 

:基本的には、このようなトークン= 2にトークン= 3を変更したいです。

+0

ありがとう、私は戻って家に帰るときにそれを試してみるつもりです。今は家にいません。 –

+0

2つのmeta.xmlファイルのために、それは'name'sの多くを言う –

+0

Hmm 3 snipetsの1つは働いていない?あなたはそれらすべてを試しましたか?また、処理したいxmlの一部を投稿することができますので、手元にあるタスクをより明確に把握できますか? – Jay

0
findstr /r /s ".*" meta.xml 

は形で、あなたの現在のディレクトリとそのすべてのサブディレクトリ内のすべてのmeta.xmlファイルからすべての行を提供します:

dir1\dir2\dir2\meta.xml: line is here. 

をあなたはもっと複雑なものが必要な場合は、私がインストールをお勧めしたいですCygwinのか、GNUツールとそのからbashシェルまたはUNIXなどのユーティリティを使用して、のようなもの:すべてのmeta.xmlのファイルを検索するに

find . -name meta.xml -exec cat {} ';' 
+0

私は最初のものが好きですが、問題はすべての行を必要としないということです。 findstrに自分のコマンド(私の編集したポストを参照)を置​​くことができる方法はありますか? –

+0

すべての行を必要としない場合は、より具体的な検索語を入力してください。どうかこれについて> findstr/r/s "tokens-。delims =" meta.xml – Glen

+1

@ YourComputerHelpZ。 command.com/cmd.exeは悪い古いMSDOS時代からずっと遠くにありましたが、それでもbash(またはksh)の悪いいとこです。 Cygwinを使用することの提案は私の好みになります。実際には、あなたにはより豊かな表現力が与えられます。 – paxdiablo

0

dir meta.xml /s 

次に、あなたは

dir meta.xml /s | someCommand 
+0

もう1つは素晴らしいようですが、どうすれば 'SomeCommand'をもっと多くのコード行に置き換えることができますか? –

+0

は動作しません、私に 'FINDSTR:meta.xml not found'を与え続けます。私はそれがそれのためにすべてのdirsを見るべきであることを意味しました... –

+0

* subdirs私は –

0

のようないくつかの他のコマンドにパイプ出力を私は私はあなたが欲しいものを理解している場合、非常にわからないことができます。 meta.xmlという名前のすべてのファイルを検索したいが、そのファイル内の何かを検索したいのですか、そのファイルの完全な内容を見たいと思っていますか?見つかったファイルの名前に関する出力を除外したい場合は、ファイルの内容にのみ関心があります。

私は、これはCMDで行うことが可能であるかどうかわからないですが、あなたはcygwinをインストールした場合、あなたはそれを次のように行いやすくすることができます検索するための

prompt>find top_level_directory -name meta.xml -print0 | xargs -0 grep -h "your search pattern" 

または出力するための

prompt>find top_level_directory -name meta.xml -print0 | xargs -0 cat 

を完全なファイル

+0

私は、余分なコマンドラインツールを使用しないでください。 –

+0

ok、um ...私のコマンドとの組み合わせがありますか?おそらくcygwinも私が達成したいことをすることができますか? –