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

[文本处理] [已解决]批处理如何查找并比对文件中的指定字符串?

[复制链接]
发表于 2015-12-16 13:53:52 | 显示全部楼层 |阅读模式
需求如下:
先提供两(多个)个文件。
第一个文件:apprevision.txt(含有app列表及不准确的版本,第三列备注可以忽略)
app名称                                       版本号        备注
mobilelife_reset                       297                                
mobilelife_unlock                       253                                
mobilelife_usercancellation     298
第二个文件:compile.log(每个app目录都有这个文件,如果没有,就输出该app已停用)
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).
--- End of compile report ---

具体思路是取apprevision中的app名称和版本,然后将取到的版本和app目录里的版本进行比对,如果不对则输出到result.txt文件中
mobilelife_reset版本不符 实际版本为35                             
mobilelife_unlock版本不符 实际版本为36                                 
mobilelife_usercancellation已停用

目前仅能把app目录里的实际版本给显示处理,循环部分卡住了,期待各位高手帮忙把后续的给完善下。谢谢了!


备注:app目录就在当前apprevision.txt同一目录里,然后每个app目录里都有个compile.log文件,如果没有目录或者没有文件提示该app已停用即可。
附上本人已写的丁点代码,你们可以无视。
  1. @echo on &color 0a &setlocal enabledelayedexpansion
  2. pushd "%cd%"
  3. set n=1
  4. for /f "skip=1 tokens=3* delims= " %%a in (C:\Edify\ewfapps\install\IVR-main1\compile.log) do (echo %%a >1.txt
  5. set /a n=!n!+1
  6. if !n!==2 goto end
  7. )
  8. :end
  9. pause
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-12-16 14:09:04 | 显示全部楼层
你敢给一个靠谱点的例子么,app名对不上,版本对不上
app在哪也不知道,我哪知道那个目录是app目录
 楼主| 发表于 2015-12-16 14:19:50 | 显示全部楼层
本帖最后由 pcl_test 于 2015-12-16 14:31 编辑

回复 2# flyinnet9

抱歉啊  我上个截图吧
 楼主| 发表于 2015-12-16 14:35:39 | 显示全部楼层
附上群里某位大神提供的源码。再次感谢
 楼主| 发表于 2015-12-16 14:36:11 | 显示全部楼层
  1. @echo off & setlocal enabledelayedexpansion

  2. for /f "skip=1 tokens=1,2 delims=        " %%i in (apprevision.txt) do (
  3.         if exist "%%i" (
  4.                 for /f "delims=" %%a in ('dir /ad /b') do (
  5.                         set dirname=%%a
  6.                         if "!dirname!"=="%%i" (
  7.                                 for /f "usebackq delims=" %%m in ("%%a\compile.log") do (
  8.                                         set /a n+=1
  9.                                         if !n!==2 (
  10.                                                 for %%r in (%%m) do set revision=%%r
  11.                                                 if "!revision!" neq "%%j" (
  12.                                                         echo;[%%i]版本不符 实际版本为[!revision!]
  13.                                                 )
  14.                                         )
  15.                                 )
  16.                                 set n=
  17.                         )
  18.                 )
  19.         ) else echo;[%%i]未启用...
  20. )

  21. pause & exit /b
复制代码
发表于 2015-12-16 16:30:21 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "skip=1 tokens=1-2" %%a in (apprevision.txt) do (
  4.   if exist "%%a" (
  5.     if not exist "%%a\compile.log" (
  6.       echo.%%a 已停用
  7.     ) else (
  8.       for /f "tokens=4 delims= " %%c in ('findstr "Revision:" "%%a\compile.log"') do (
  9.         if "%%c"=="%%b" (echo.%%a 版本一致) else (echo.%%a 版本不符 实际版本:%%c)
  10.       )
  11.     )
  12.   ) else (
  13.     echo.%%a 目录不存在
  14.   )
  15. )
  16. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
fish509008 + 1 简单高效,已引用。

查看全部评分

 楼主| 发表于 2015-12-17 09:13:12 | 显示全部楼层
回复 6# flyinnet9


    感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 05:59 , Processed in 0.034764 second(s), 13 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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