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

[文本处理] 求助大神,利用批处理将原始txt中的多段内容提取出来,并分别保存为多个txt

原始txt内容如下所示

请问能否利用批处理,每出现一次TPV_********,就将该行下面的内容保存至另一个txt中,而该txt名称即为所对应的TPV_********。
批处理后希望得到如下效果:
txt保存名字为“TPV_1979020212_86.08_35.11    3.txt”,txt内容打开为:
1979-02-02  12:00:00  86.08  35.11 5583.00        272.28         166762.15      16             4.87           6.95           658272.4       4.67           1.86                        
1979-02-02  18:00:00  89.54  35.35 5584.00        252.77         152875.85      15             4.78           9.39           532490.2       2.69           0.72                 
1979-02-03  00:00:00  92.41  35.86 5579.00        186.03         81081.03       9              3.52           5.09           356971.3       1.98           0.68            

下一个txt保存名字为“TPV_1979020618_72.24_32.73    8.txt”, 打开内容为:
1979-02-06  18:00:00  72.24  32.73 5636.00        225.53         145213.88      14             4.64           6.02           660369.5       4.57           -0.13                     
1979-02-07  00:00:00  73.02  32.01 5620.00        419.66         497871.24      47             3.48           8.29           2035505.2      12.06          -2.96               
1979-02-07  06:00:00  77.01  29.96 5639.00        373.27         416100.30      42             3.29           6.43           1442648.0      7.20           -3.50               
1979-02-07  12:00:00  79.94  31.01 5620.00        566.49         955620.02      93             2.23           10.50          2788722.2      14.33          -3.29              
1979-02-07  18:00:00  85.43  33.00 5623.00        387.92         406920.88      41             2.48           10.23          1213683.2      11.42          -0.29              
1979-02-08  00:00:00  87.01  33.00 5603.00        405.04         503385.08      49             2.56           10.67          1752541.4      17.43          0.67                    
1979-02-08  06:00:00  91.36  33.08 5612.00        392.70         462576.83      47             3.08           11.12          2136844.4      19.11          0.73                  
1979-02-08  12:00:00  89.47  33.00 5600.00        505.40         742310.00      73             2.55           12.85          2703889.9      28.78          0.57               
以此类推,将文本中所有的TPV_*****后的内容保存为不同的txt文件,并将txt命名为对应的TPV_*****
感觉有些复杂,不知能否用批处理实现
真挚感谢各位大神!

:'(:'(:'(:'(
请问有人么~~~没有学过批处理,编程又是个渣渣,这数据处理起来太复杂,只能投靠各位了QAQ

TOP

把文本拖到批处理上。文本要 ansi 编码。
  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f "tokens=1-2*" %%a in ('type %1') do echo %%a|findstr /b /i /c:"TPV_">nul 2>nul && set "名称=%%a    %%b" || echo %%a  %%b  %%c>>"!名称!.txt"
  3. pause & exit
复制代码
================================

TOP

用这个更简洁
  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f "delims=" %%a in ('type %1') do echo %%a|findstr /b /i /c:"TPV">nul 2>nul && set "名称=%%a" || echo %%a>>"!名称!.txt"
  3. pause & exit
复制代码
==============================

TOP

回复 4# xczxczxcz


    您好!很感谢您提供帮助,我将您给出的语法copy保存为bat运行,用的是ansi编码,但报错提示命令语法不正确。请问您知道该如何解决么?
    非常感谢您的帮助。

TOP

回复 4# xczxczxcz


    大神您好,报错提示是这样的,用sublime text打开时,中文显示的是乱码,请问我是还有哪里需要修改么?地址,或名称之类的。之前没有接触过批处理,麻烦您了

TOP

本帖最后由 xczxczxcz 于 2018-8-12 10:34 编辑

回复 6# hlyahs

批处理 也要保存为 ansi 编码。 你的txt 也要保存 为 ansi 编码。

你如果 想要 对 utf 文本也能自动运行。可到本坛 下载 iconv.exe 放到系统目录下。或与 批处理放到一起。再在批处理中加一个判断。你的txt就可以是 utf8/ansi都可以。

http://batch-cn.qiniudn.com/tool/iconv.exe

TOP

回复 7# xczxczxcz

大神好,大神还在么?
我把要提取的txt保存成ansi编码后,再次运行bat还是提示语法有错误。
去下载您说的inconv.exe,电脑提示有病毒直接终止下载了,(ps,请问保存到系统目录下是值c盘widows里么?判断语句我不会写...)
大神,救救我这个渣渣吧QAQ,求不要嫌我烦orz

TOP

本帖最后由 xczxczxcz 于 2018-8-12 11:58 编辑

回复 8# hlyahs

把你的 txt 发来看下,偶测试没问题的。或者你把批处理中的 乱码部分改成相同的英文字符.


把中文改英文,
  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f "delims=" %%a in ('type %1') do echo %%a|findstr /i/c:"TPV">nul 2>&1 && set "str=%%a" || echo %%a>>"!str!.txt"
  3. pause & exit
复制代码
只要你的 txt 中没有中文字符.把 txt 拖到 批处理上。
那个 iconv.exe 没有毒。win10 defender 已查。偶是在官网下的 900多k的。

TOP

回复 8# hlyahs


    你是不是直接双击批处理的。要把 txt 拖到 批处理 上再松开 就可以了。

TOP

直接双击批处理
  1. @echo off & setlocal EnableDelayedExpansion
  2. del /q *.log>nul 2>nul
  3. for %%i in (*.txt) do for /f "delims=" %%a in ('type "%%i"') do echo %%a|findstr /i/c:"TPV">nul 2>&1 && set "str=%%a" || echo %%a>>"!str!.log"
  4. pause & exit
复制代码

TOP

回复 11# xczxczxcz

感动天地QAQ
我开始是双击的bat,原来是要把txt拖进去..蠢哭了我

然后,拆分以后,能再麻烦大神教我一个操作么
大神,我的txt不是拆分成很多个了么,每个txt里面有16列,请问能不能用批处理对所有文本第一行的倒数第二列进行判定,如果数字=1,保留该txt文本,如果数字=0,就把这个txt移动到其他文件夹中
txt打开是这样的,每个txt行数不同,列数相等

不过能把txt拆分开来我已经很感谢了!,大神不管我也没事QAQ,我也可以自己一个一个打开找………………也就几千个文本................要不大神你再救救我吧
啊啊啊啊啊,感觉自己脸皮好厚一直麻烦别人,但是为了生存Orz。。。

TOP

回复 12# hlyahs

先把你已分离出来的文件 放到任意一个文件里,再把该文件夹拖到批处理上。
  1. @echo off & setlocal EnableDelayedExpansion
  2. md new>nul 2>nul
  3. for /f "delims=" %%a in ('dir/a-d/b "%~1\*.txt"') do (
  4.   set /a n=0
  5.   for /f "delims=" %%i in ('type "%~1\%%a"') do (
  6.      set /a n+=1
  7.      if !n! leq 1 (
  8.      set "str=%%i"
  9.      set "str=!str: =\!"
  10.      for /f "delims=" %%m in ("!str!\..") do if /i "%%~nxm" == "0" move /y "%~1\%%a" "new\"
  11.      )
  12.    )
  13. )
  14. pause & exit
复制代码

TOP

回复 13# xczxczxcz


    脚本可以使用,处理数据超级方便啊啊啊,我要哭了,谢谢耐心回答,大神你真的好好QAQ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

TOP

回复 13# xczxczxcz

大神您好,我又来打扰您了orz
之前请您帮忙处理筛选了txt,现在又遇到了一个小问题

就是我现在有很多个这样的txt,每个txt有固定的16列,但行数不一定相同。请问大神能不能用批处理,去判定每个txt的最后一列是否出现0,如果出现0的话,就将这部分txt复制到另一个文件夹中。

感谢大神无私的帮助Orz!期待您的回复...

TOP

返回列表