[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

需求如下:
先提供两(多个)个文件。
第一个文件: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
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

你敢给一个靠谱点的例子么,app名对不上,版本对不上
app在哪也不知道,我哪知道那个目录是app目录

TOP

本帖最后由 pcl_test 于 2015-12-16 14:31 编辑

回复 2# flyinnet9

抱歉啊  我上个截图吧

TOP

附上群里某位大神提供的源码。再次感谢

TOP

  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
复制代码

TOP

  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

评分人数

TOP

回复 6# flyinnet9


    感谢!

TOP

返回列表