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

[文本处理] 批处理如何实现多个txt文本截取固定值前后的内容?

已知文件夹test下面有qq-001、qq-002~qq-985个txt文本文件,每个文件内有systeminfo:、hardinfo、softinfo、appinfo、userinfo等字段;
每个字段后面包含不同文字信息,现在的需求是根据这些字段截取出后面的信息,并重新创建到新的txt文本内,如new_qq-001、new_qq-002。

是在同一行还是在不同的行

TOP

回复 1# e2fsck
  1. @echo off
  2. set var=systeminfo: hardinfo softinfo appinfo userinfo
  3. setlocal enabledelayedexpansion
  4. for %%i in (*.txt) do (
  5.     (for /f "delims=" %%a in ('findstr /r "%var%" %%i') do (
  6.         set "str=%%a"
  7.         for %%b in (%var%) do set str=!str:*%%b=!
  8.         echo,!str!
  9.     ))>new_%%i
  10. )
  11. pause
复制代码

TOP

回复 1# e2fsck


    请把文本内容发出来以便更好的说明需求。如果文件太大,请把附件上传到阿里云盘或百度网盘。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 e2fsck 于 2021-9-8 15:46 编辑

举例:
文本名qq-001.txt
内容如下:
System Info:
      Computer Name =  qq-001
      OS       Type =  Windows 10 企业版 64-bit (10.0, Build 17763) (17763.rs5_release.180914-1434)
      System  Model =  123456789
      CPU     Model =  Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz (6 CPUs), ~2.8GHz
      RAM      Size =  8192MB RAM

DisplayCard :
      Display  Card =  NVIDIA GeForce GTX 1060 3GB
      DisplayMemory =  7039 MB

Mother Board:
      Manufacturer     = Dell

      MotherBoard Model= 36EF


Hard Info:
      Model=ST1000DM010-2EP102

      Size=1000202273280

需要提取这些文本中System Info:和Hard Info:两个字段后不同行的内容,提取保存到new_qq-001.txt新文本,仅限这2个指定字段,不包含其他字段,如提取System Info:后的内容,不包含Diskplay Card:字段

TOP

回复 4# Batcher

举例:
文本名qq-001.txt
内容如下:
System Info:
      Computer Name =  qq-001
      OS       Type =  Windows 10 企业版 64-bit (10.0, Build 17763) (17763.rs5_release.180914-1434)
      System  Model =  123456789
      CPU     Model =  Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz (6 CPUs), ~2.8GHz
      RAM      Size =  8192MB RAM

DisplayCard :
      Display  Card =  NVIDIA GeForce GTX 1060 3GB
      DisplayMemory =  7039 MB

Mother Board:
      Manufacturer     = Dell

      MotherBoard Model= 36EF


Hard Info:
      Model=ST1000DM010-2EP102

      Size=1000202273280

需要提取这些文本中System Info:和Hard Info:两个字段后不同行的内容,提取保存到new_qq-001.txt新文本,仅限这2个指定字段,不包含其他字段,如提取System Info:后的内容,不包含Diskplay Card:字段

TOP

回复 3# qixiaobin0715


这个实测不行,提取的内容不对

TOP

  1. @echo off
  2. set var="System Info:" "Hard Info:"
  3. for %%i in (*.txt) do (
  4.     (for /f "delims=" %%a in (%%i) do (
  5. if defined f (
  6. echo;%%a|findstr ":">nul&&set f=||echo %%a
  7. )
  8.          for %%b in (%var%) do (
  9. if "%%a"=="%%~b" set f=1
  10. )
  11.     ))>new_%%i
  12. )
  13. pause
复制代码

TOP

回复 7# e2fsck
  1. @echo off
  2. set var=systeminfo: hardinfo: softinfo: appinfo: userinfo:
  3. setlocal enabledelayedexpansion
  4. for %%i in (*.txt) do (
  5.     (for /f "delims=" %%a in ('findstr /n ".*" %%i') do (
  6.         set "str=%%a"
  7.         set str=!str:*:=!
  8.         set str1=!str: =!
  9.         if "!str1:~-1!"==":" (
  10.             set n=false
  11.             for %%b in (%var%) do if /i "!str1!"=="%%b" set n=true&echo,!str!
  12.         ) else if "!n!"=="true" (
  13.             echo,!str!
  14.         )
  15.     ))>new_%%i
  16. )
  17. pause
复制代码

TOP

以上代码经过单个文本测试。可忽略关键词字母大小写及排除关键词行多余空格的影响。

TOP

回复 10# qixiaobin0715

谢谢关注,我测试了一下这个应该是通过=号作为关键信息去提取。如果文本内容没有=号的怎么提取?
前面文本都有X=X这样的格式。
假设其中一段是admin info:
内容
admin user1
admin user100
user 198

TOP

非也非也!!!
9楼代码第2行最后面加上admininfo:,前面用空格隔开。

TOP

回复 11# e2fsck
与等号一毛钱的关系也没有,代码第2行罗列的是去除所有空格的字段名。

TOP

回复 13# qixiaobin0715


  确实可以了,牛逼,谢谢~

TOP

返回列表