我有一个包含以下内容的目录:
-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
谢谢!
答案 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
用于输出完整文件。