批处理/ CMD:查找每个文件夹文件meta.xml

时间:2009-08-18 10:52:30

标签: directory batch-file cmd

我有一个包含以下内容的目录:

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

所以它需要在每个目录'meta.xml'中找到所有(因此我不必在代码中的每个目录中键入)并且我希望在每个meta.xml文件中完成一个命令。

有没有可能的方法来做到这一点,并且可以安静地完成,因为我正在谈论的命令给出了来自该meta.xml文件的文本行,我不想看到它做什么,你得到像这样的东西:

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

如果那不清楚,只要认为我只是喜欢它安静地跑,好吧。 (/ Q可能?)

这是我所说的命令:

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

它需要为每个meta.xml文件执行此操作并提供输出,以便在执行时获得总列表

type temp3.lis

谢谢!

4 个答案:

答案 0 :(得分:2)

好的,据我所知,这应该有效:

<强> 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&gt; blahblah </name&gt; blahblah 部分)

这应该做得更快,不需要临时文件,少一个 for loop (为便于阅读而分成多行,如果需要,它们都会保留在一行。

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

不确定您喜欢哪种, IF 这就是您所需要的。

修改
好吧,我想我明白了,但我不确定它会解决所有问题。基本上你想把 tokens = 2 更改为 tokens = 3 ,如下所示:

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

现在看看是否有效。

答案 1 :(得分:0)

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

将为您提供当前目录及其所有子目录中每个meta.xml文件的每一行,格式为:

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

如果您需要更复杂的东西,我建议安装Cygwin或GNU工具并使用bash shell或类似UNIX的实用程序,例如:

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

答案 2 :(得分:0)

要查找所有meta.xml文件:

dir meta.xml /s 

然后你可以将输出传递给其他命令,如

dir meta.xml /s | someCommand

答案 3 :(得分: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

用于输出完整文件。