Board logo

标题: [文本处理] 批处理如何从文本中提取内容并创建指定内容和文件名的新的文本? [打印本页]

作者: 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

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (测试文本.txt) do (
  3.   for %%b in (%%a) do set "name=%%b"
  4.   echo %%a>>!name!.txt
  5. )
复制代码

作者: asnahu    时间: 2012-7-17 18:04

  1. 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)
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (测试文本.txt) do (
  3.   if defined str (
  4.     for %%b in (%%a) do set "name=%%b"
  5.     if exist !name!.txt (echo,%%a>>!name!.txt
  6.     ) else (echo,!str!&echo,%%a)>!name!.txt
  7.   ) else set "str=%%a"
  8. )
复制代码

作者: 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