找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 77613|回复: 15

[文本处理] 【已解决】批处理怎样遍历指定目录并查找指定文件的内容?

[复制链接]
发表于 2015-12-18 14:35:02 | 显示全部楼层 |阅读模式
本帖最后由 fish509008 于 2015-12-22 14:53 编辑

遍历指定目录下的文件夹,文件夹名称就是“程序名称”,每个“程序名称”文件夹下有compile.log里面有版本
然后解析生成一个文件apprevision.txt,内容如下:
程序名称        版本号        备注
文件夹1        内版本1       
文件夹2        内版本2       
文件夹3        内版本3       
...
下面的compile.log文件内容中要查找的内容就是“Revision: 32”,(版本号)32,然后把该compile.log的上层目录(程序名称)写入文件
Compile log of application: mobilelife_user cancellation
Version: 1.0        Revision: 32
Compile date/time: 2015-10-22 19:16:32
Elapsed time: 8.63 seconds
Summary: Total of 76 steps and 34 objects compiled.
         Total errors(0) and warnings(0).
...
补充:如果该目录下没有compile.log文件则输出该目录(程序名称)不存在即可。
备注:批处理执行的目录和指定目录不在同一个磁盘里
发表于 2015-12-18 15:02:25 | 显示全部楼层
本帖最后由 flyinnet9 于 2015-12-18 15:04 编辑

。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  1. @echo off
  2. set /p p=指定完整路径:
  3. cd /d %p%
  4. if not exist apprevision.txt echo.程序名称        版本号        备注>apprevision.txt
  5. for /f "delims=" %%a in ('dir /ad /b') do (
  6.   pushd "%%a"
  7.   if exist "%%a\compile.log" (
  8.     for /f "tokens=4" %%b in ('findstr "Revision:" "%%a\compile.log"') do (
  9.       echo.%%~na %%b>>apprevision.txt
  10.     )
  11.   ) else echo.%%a\compile.log不存在
  12.   popd
  13. )
  14. pause
复制代码
 楼主| 发表于 2015-12-18 15:27:03 | 显示全部楼层
回复 2# flyinnet9


执行后就停留在指定目录里,后面的for语句没有执行
发表于 2015-12-18 15:59:52 | 显示全部楼层
回复 3# fish509008


    错误信息贴上来看看
 楼主| 发表于 2015-12-18 17:06:17 | 显示全部楼层
回复 4# flyinnet9


D:\findrev\New Folder>set /p p=C:\apps\install
C:\apps\install

我打开echo显示了,没有任何报错的
发表于 2015-12-18 20:23:53 | 显示全部楼层
回复 5# fish509008
  1. set /p p=指定完整路径:
复制代码
是让你运行后输入(或复制粘贴)路径后按一下回车键

或者直接改成这样
  1. set "p=C:\apps\install"
复制代码
发表于 2015-12-18 20:43:06 | 显示全部楼层
不加 pushd 和 popd 试试呢?
 楼主| 发表于 2015-12-21 15:55:31 | 显示全部楼层
回复 6# pcl_test


    改成set "p=C:\apps\install"我也没调过去。
 楼主| 发表于 2015-12-21 15:56:05 | 显示全部楼层
不加 pushd 和 popd 试试呢?
WHY 发表于 2015-12-18 20:43



    不加这个肯定不行啊,不在同一个目录,找不到的。
 楼主| 发表于 2015-12-21 15:57:17 | 显示全部楼层
本帖最后由 fish509008 于 2015-12-21 15:59 编辑

研究了下,下面是可以执行的代码,但是感觉执行时间稍微有点长。有看到这的欢迎给出优化建议!
  1. @echo off
  2. set targetPath=指定完整路径
  3. set logFile=%~dp0apprevision.txt
  4. echo.程序名称        版本号        备注        >"%logFile%"
  5. pushd "%targetPath%"
  6. for /f "delims=" %%a in ('dir /ad /b') do (
  7.   if exist "%%a\compile.log" (
  8.     for /f "tokens=4" %%b in ('findstr "Revision:" "%%a\compile.log"') do (
  9.       echo.%%~na        %%b                >>"%logFile%"
  10.     )
  11.   ) else (echo.%%a        未编译        >>"%logFile%")
  12. pause
  13. )
  14. pause& exit /b
复制代码
发表于 2015-12-21 16:50:31 | 显示全部楼层
回复 10# fish509008


也许这样可以稍微快一点点:
  1. @echo off
  2. set targetPath=指定完整路径
  3. set logFile=%~dp0apprevision.txt
  4. >"%logFile%" echo 程序名称        版本号        备注
  5. pushd "%targetPath%"
  6. (for /f "delims=" %%a in ('dir /ad /b') do (
  7.     if exist "%%a\compile.log" (
  8.         for /f "tokens=4" %%b in ('type "%%a\compile.log" ^| findstr "Revision:"') do (
  9.             echo %%~na        %%b
  10.         )
  11.     ) else (
  12.         echo %%a        未编译
  13.     )
  14. ))>>"%logFile%"
  15. pause
复制代码
发表于 2015-12-21 20:48:20 | 显示全部楼层
回复 9# fish509008


    10#的pushd和popd被你偷吃了?
发表于 2015-12-21 20:51:00 | 显示全部楼层
findstr 放在for 外层,效率上也许会好些:
  1. @echo off
  2. set "targetPath=D:\test"
  3. pushd "%targetPath%"
  4. (
  5.     echo;程序名称        版本号        备注
  6.     for /f "tokens=1,5delims=\:" %%i in ('findstr /is "Revision:" *.log^|findstr /ib "[^\\]*\\compile\.log:"')do (
  7.         echo;%%i    %%j
  8.     )
  9.     for /d %%i in (*) do if not exist "%%i\compile.log" echo;%%i    未编译
  10. )>"%~dp0apprevision.txt"
  11. pause
复制代码
 楼主| 发表于 2015-12-22 11:09:26 | 显示全部楼层
回复 11# DAIC


    执行时间还是比较长,大略计时了下 大约1分钟,是我这目录太多吗?
 楼主| 发表于 2015-12-22 11:10:02 | 显示全部楼层
findstr 放在for 外层,效率上也许会好些:
WHY 发表于 2015-12-21 20:51



    方外层我也试了,时间上看基本没太大区别的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:55 , Processed in 0.019359 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表