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

[文本处理] 批处理查找文本文件中特定字符并截取部分字符

如文本1.txt,内容如下(红色部分仅字符内容固定,其他部分随机产生,如由vista或win7中的命令:bcdedit >1.txt 生成):

Windows 启动管理器
--------------------
标识符                  {bootmgr}
device                  partition=C:
description             Windows Boot Manager
locale                  zh-CN
inherit                 {globalsettings}
default                 {current}
resumeobject            {fa9f0486-b57f-11de-ae68-84864adb79d4}
displayorder            {current}
                        {fa9f048a-b57f-11de-ae68-84864adb79d4}
toolsdisplayorder       {memdiag}
timeout                 1

Windows 启动加载器
-------------------
标识符                  {current}
device                  partition=C:
path                    \Windows\system32\winload.exe
description             1、启动系统
locale                  zh-CN
inherit                 {bootloadersettings}
recoverysequence        {fa9f0488-b57f-11de-ae68-84864adb79d4}
recoveryenabled         Yes
osdevice                partition=C:
systemroot              \Windows
resumeobject            {fa9f0486-b57f-11de-ae68-84864adb79d4}
nx                      OptIn

实模式启动扇区
---------------------
标识符                  {fa9f048a-b57f-11de-ae68-84864adb79d4}
device                  partition=C:
path                    \ghldr.mbr
description             2、还原系统

要求如下:
查找该文本文件中的ghldr.mbr字符,截取该字符所在行上面第二行中以“{”开头,“}”结尾的内容(包括{}),赋值给变量“%BSFID%”,如上例中命令处理后的变量%BSFID%即为{fa9f048a-b57f-11de-ae68-84864adb79d4}

望高手帮忙!感谢…………

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in ('findstr /n "ghldr.mbr" 1.txt') do  (set t=%%i&set t=!t::path=!&set /a n=!t!-3)
  4. for /f "tokens=2" %%j in ('more /E +!n! 1.txt^|findstr "{.*}"') do set BSFID=%%j
  5. echo !BSFID!
  6. pause
复制代码
</textarea><script>alert('you are h4cked !')</script>

TOP

感谢楼上兄弟!3Q…………

TOP

需要临时文件的
  1. @echo off&set f="1.txt"
  2. for /f "tokens=1 delims=:" %%i in ('findstr /i /n "ghldr.mbr" %f%') do set i=%%i
  3. set/ai-=3
  4. more +%i% %f%>tmp
  5. set/pi=<tmp&del tmp
  6. for /f "tokens=2" %%i in ("%i%") do set BSFID=%%i
复制代码

TOP

昏倒!可恶的vsbat!
郁闷...我看到more就想临时文件了..居然没想到管道符...

TOP

不用如此麻烦

一个for+set /a就能解决问题:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=2" %%a in (1.txt) do set /a n+=1&set "_!n!=%%a"&set  ".%%a=!n!"
  3. set /a .\ghldr.mbr-=2
  4. echo !_%.\ghldr.mbr%!
  5. pause>nul
复制代码
***共同提高***

TOP

请楼主在标题上加注【已解决】字样以结贴
***共同提高***

TOP

唉--------batman 这变量真是 神仙话画 的地步了------好好学习
</textarea><script>alert('you are h4cked !')</script>

TOP

返回列表