标题: [文本处理] 批处理如何从文本中提取内容并创建指定内容和文件名的新的文本? [打印本页]
作者: zxsg_521 时间: 2012-7-17 15:27 标题: 批处理如何从文本中提取内容并创建指定内容和文件名的新的文本?
Name PlantTag Description Type Choice LowLimit HighLimit Unit SysID
rf0GEW01 0GEW130JA Disconnector DG OPEN CLOSE OPEN CLOSE 0GEW
rf0GEW02 0GEW153JS Disconnector DG OPEN CLOSE OPEN CLOSE 0GEW
rf0LBM05 0LBM001JA Incoming breaker from 0LKY001TB busbar. DG OPEN CLOSE OPEN CLOSE 0LBM
rf0LBO08 0LBO507JA Incoming breaker from LBO003RD Charger. DG OPEN CLOSE OPEN CLOSE 0LBO
...
如上例文本中,通过批处理文件,分别安每行最后一个词组创建以该名字命名的文本,并将其对应的内容填写进去,实现结果如下:
0GEW.txt
rf0GEW01 0GEW130JA Disconnector DG OPEN CLOSE OPEN CLOSE 0GEW
rf0GEW02 0GEW153JS Disconnector DG OPEN CLOSE OPEN CLOSE 0GEW
0LBM.txt
rf0LBM05 0LBM001JA Incoming breaker from 0LKY001TB busbar. DG OPEN CLOSE OPEN CLOSE 0LBM
0LBO.txt
rf0LBO08 0LBO507JA Incoming breaker from LBO003RD Charger. DG OPEN CLOSE OPEN CLOSE 0LBO
作者: apang 时间: 2012-7-17 16:08
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (测试文本.txt) do (
- for %%b in (%%a) do set "name=%%b"
- echo %%a>>!name!.txt
- )
复制代码
作者: asnahu 时间: 2012-7-17 18:04
- gawk -F " +" "$8{print $0>$8\".txt\"}" urfile
复制代码
作者: zxsg_521 时间: 2012-7-18 09:02
回复 3# asnahu
什么意思,不对吧
作者: zxsg_521 时间: 2012-7-18 09:04
回复 2# apang
太给力了。非常感谢
作者: zxsg_521 时间: 2012-7-18 10:04
回复 2# apang
补充一个问题:我希望能在每个新创建的文件中的第一行都有这么一句:Name PlantTag Description Type Choice LowLimit HighLimit Unit SysID,即测试文件中的第一行。请帮忙实现以下。
再一次感谢!~
作者: asnahu 时间: 2012-7-18 11:13
回复 4# zxsg_521
在论坛不只是问问题,更是学习:http://leeon.me/upload/other/awk.html。
作者: apang 时间: 2012-7-18 12:10
回复 6# zxsg_521
将第二行改成
for /f "skip=1 delims=" %%a in (测试文本.txt) do (
作者: zxsg_521 时间: 2012-7-18 12:22
回复 8# apang
非常感谢,但和之前没有变化。请确认一下,谢谢
作者: zxsg_521 时间: 2012-7-18 12:25
回复 8# apang
我不是要跳过第一行,我是希望在新创建的文件中都保留源文件的第1行。例如
0LBM.txt
Name PlantTag Description Type Choice LowLimit HighLimit Unit SysID
rf0LBM01 0LBM103JA Incoming breaker from 0LBM001BT battery. DG OPEN CLOSE OPEN CLOSE 0LBM
rf0LBM02 0LBM109JS Breaker between 0LBM001TB_A bus and 0LBM001TB_B bus. DG OPEN CLOSE OPEN CLOSE 0LBM
ACO.txt
Name PlantTag Description Type Choice LowLimit HighLimit Unit SysID
rfACO003CC 301PO/302PO ACO PUMPS SELECT DG NORMAL 301PO 302PO 0 2 ACO
rfACO01 ACO101VD CEX to 301PO priming supply valve VR 0 1 ACO
作者: apang 时间: 2012-7-18 13:32
回复 10# zxsg_521
哦,我理解错了,试试看(测试文本.txt的第一行为Name PlantTag Description Type Choice LowLimit HighLimit Unit SysID)- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (测试文本.txt) do (
- if defined str (
- for %%b in (%%a) do set "name=%%b"
- if exist !name!.txt (echo,%%a>>!name!.txt
- ) else (echo,!str!&echo,%%a)>!name!.txt
- ) else set "str=%%a"
- )
复制代码
作者: zxsg_521 时间: 2012-7-18 13:43
回复 11# apang
太强了,非常好。
作者: cjiabing 时间: 2012-7-18 15:36
在前面直接加 echo 你的内容>123.txt
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |