标题: [文本处理] 批处理如何实现多个txt文本截取固定值前后的内容? [打印本页]
作者: e2fsck 时间: 2021-9-7 17:59 标题: 批处理如何实现多个txt文本截取固定值前后的内容?
已知文件夹test下面有qq-001、qq-002~qq-985个txt文本文件,每个文件内有systeminfo:、hardinfo、softinfo、appinfo、userinfo等字段;
每个字段后面包含不同文字信息,现在的需求是根据这些字段截取出后面的信息,并重新创建到新的txt文本内,如new_qq-001、new_qq-002。
作者: idwma 时间: 2021-9-7 18:21
是在同一行还是在不同的行
作者: qixiaobin0715 时间: 2021-9-7 20:12
回复 1# e2fsck - @echo off
- set var=systeminfo: hardinfo softinfo appinfo userinfo
- setlocal enabledelayedexpansion
- for %%i in (*.txt) do (
- (for /f "delims=" %%a in ('findstr /r "%var%" %%i') do (
- set "str=%%a"
- for %%b in (%var%) do set str=!str:*%%b=!
- echo,!str!
- ))>new_%%i
- )
- pause
复制代码
作者: Batcher 时间: 2021-9-8 09:54
回复 1# e2fsck
请把文本内容发出来以便更好的说明需求。如果文件太大,请把附件上传到阿里云盘或百度网盘。
作者: e2fsck 时间: 2021-9-8 15:42
本帖最后由 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:字段
作者: e2fsck 时间: 2021-9-8 15:46
回复 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:字段
作者: e2fsck 时间: 2021-9-8 15:47
回复 3# qixiaobin0715
这个实测不行,提取的内容不对
作者: idwma 时间: 2021-9-8 20:29
- @echo off
- set var="System Info:" "Hard Info:"
- for %%i in (*.txt) do (
- (for /f "delims=" %%a in (%%i) do (
- if defined f (
- echo;%%a|findstr ":">nul&&set f=||echo %%a
- )
- for %%b in (%var%) do (
- if "%%a"=="%%~b" set f=1
- )
- ))>new_%%i
- )
- pause
复制代码
作者: qixiaobin0715 时间: 2021-9-8 21:19
回复 7# e2fsck - @echo off
- set var=systeminfo: hardinfo: softinfo: appinfo: userinfo:
- setlocal enabledelayedexpansion
- for %%i in (*.txt) do (
- (for /f "delims=" %%a in ('findstr /n ".*" %%i') do (
- set "str=%%a"
- set str=!str:*:=!
- set str1=!str: =!
- if "!str1:~-1!"==":" (
- set n=false
- for %%b in (%var%) do if /i "!str1!"=="%%b" set n=true&echo,!str!
- ) else if "!n!"=="true" (
- echo,!str!
- )
- ))>new_%%i
- )
- pause
复制代码
作者: qixiaobin0715 时间: 2021-9-8 22:05
以上代码经过单个文本测试。可忽略关键词字母大小写及排除关键词行多余空格的影响。
作者: e2fsck 时间: 2021-9-9 13:44
回复 10# qixiaobin0715
谢谢关注,我测试了一下这个应该是通过=号作为关键信息去提取。如果文本内容没有=号的怎么提取?
前面文本都有X=X这样的格式。
假设其中一段是admin info:
内容
admin user1
admin user100
user 198
作者: qixiaobin0715 时间: 2021-9-9 13:52
非也非也!!!
9楼代码第2行最后面加上admininfo:,前面用空格隔开。
作者: qixiaobin0715 时间: 2021-9-9 14:08
回复 11# e2fsck
与等号一毛钱的关系也没有,代码第2行罗列的是去除所有空格的字段名。
作者: e2fsck 时间: 2021-9-9 15:34
回复 13# qixiaobin0715
确实可以了,牛逼,谢谢~
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |