标题: [文本处理] BAT批处理如何实现1、合并符合条件的txt 2、编辑txt文件的内容? [打印本页]
作者: bat好强大 时间: 2014-1-17 11:10 标题: BAT批处理如何实现1、合并符合条件的txt 2、编辑txt文件的内容?
本帖最后由 bat好强大 于 2014-1-17 21:44 编辑
目前有一系列操作,由于工作量大,想通过BAT来实现。我现在是这么做的:
-----------第一步 合并txt 分割线-----------
在文件夹 F1根下,有(E1.exe,E2.exe,T1.txt,T2.txt,T3.txt ... T10.txt)等文件,
我需要 合并 T1.txt T2.txt,T5-T10.txt 把*.exe 和 T3.txt T4.txt 排除掉,
于是 先- dir /b | findstr /v /x "T3.txt T4.txt" | findstr ".txt" > temp.txt
复制代码
再按照 temp.txt 里的结果,编辑一行命令进行合并- cppy 1.txt+2.txt+5.txt+...+10.txt temp.txt
复制代码
纯手工编辑,很原始的办法
-----------第二步 文本编辑 分割线-----------
得到的temp.txt文件内容 为 T1L1、T1L2、... T1Ln , T2L1,...T2Ln 这样的一列n行,
正常的行内容为 ABBBBBB ,有少数异常行为 ABBBBBBABBBBBB ,有少数重复内容行,一些空白行,
我需要 截断异常行,去除空白行和重复行,并把结果整理为 BBBBBB.A,BBBBBB.A,BBBBBB.A, 这样的形式,
目前是通过对 temp.txt内容用excel分列后处理来做的, 土的不行,很没效率
请问如何用批处理实现? 谢谢!
作者: DAIC 时间: 2014-1-17 11:18
第一步- @echo off
- (for %%i in (T*.txt) do (
- type "%%i"
- echo,
- ))>temp.log
复制代码
作者: DAIC 时间: 2014-1-17 11:22
第二步:
请把2楼代码生成的temp.log内容发一段出来(包括正常的行和异常的行)
然后说清楚希望得到的结果是什么
请用真实数据,原始格式。
如果要瞎编数据,请保证格式和真实数据完全一致。
作者: bat好强大 时间: 2014-1-17 11:22
回复 2# DAIC
感谢回复,需要建立一个 “T*.txt” 文件,把需要合并的文件名存进去么 ?
作者: bat好强大 时间: 2014-1-17 11:36
回复 2# DAIC
运行结果是%%i was unexpected at this time.
可能是我的操作问题?
作者: bat好强大 时间: 2014-1-17 11:48
回复 2# DAIC
运行成功了,我指定T1.txt T2.txt 的内容放入 temp.log- @echo off
- (for %%i in (T1.txt,T2.txt) do (
- type "%%i"
- echo,
- ))>temp.log
复制代码
内容如附件:
作者: terse 时间: 2014-1-17 12:17
先看结果- @ECHO OFF
- for /f "delims=" %%i in ('DIR /b T*.txt^|findstr /ivx "T[3-4].txt"') do (
- for /f "usebackq delims=" %%j in ("%%i") do (
- if not defined %%j echo %%j
- set "%%j=1"
- )
- )
- PAUSE
复制代码
作者: DAIC 时间: 2014-1-17 12:44
回复 6# bat好强大
T*.blk这个用通配符可以自动处理所有以字母T开头的.blk文件
不用一个一个的指定- @echo off
- (for %%i in (T*.blk) do (
- type "%%i"
- echo,
- ))>temp.log
复制代码
作者: DAIC 时间: 2014-1-17 12:47
回复 6# bat好强大
如果要排除某两个文件,除了7楼的做法之外也可以这样:- @echo off
- (for %%i in (T*.blk) do (
- if "%%i" neq "T3.blk" (
- if "%%i" neq "T4.blk" (
- type "%%i"
- echo,
- )
- )
- ))>temp.log
复制代码
作者: DAIC 时间: 2014-1-17 12:57
回复 6# bat好强大
第二步:对temp.log的进一步处理- @echo off
- setlocal enabledelayedexpansion
- (for /f "tokens=*" %%i in (temp.log) do (
- set str=%%i
- if "!str:~7!" neq "" (
- set strA=!str:~0,7!
- set strB=!str:~7!
- if not defined !strA! (
- echo,!strA!
- set strA=1
- )
- if not defined !strB! (
- echo,!strB!
- set strB=1
- )
- ) else (
- if not defined %%i (
- echo,%%i
- set %%i=1
- )
- )
- ))>temp_2.log
复制代码
作者: bat好强大 时间: 2014-1-17 21:51
回复 9# DAIC
给每个要排除的文件做一层嵌套么,我试试
作者: bat好强大 时间: 2014-1-17 22:07
先看结果
terse 发表于 2014-1-17 12:17
感谢回复。 运行结果把T3、T4.txt以外的*.txt内容都显示出来了。 请问1、把屏显结果输出到文本如何改写,2、如果要排除的多个文件,文件名不规则,怎么办呢?
作者: bat好强大 时间: 2014-1-17 22:30
回复 bat好强大
第二步:对temp.log的进一步处理
DAIC 发表于 2014-1-17 12:57
厉害!DAIC 真是高手! 运行结果基本满足我的要求,只需稍微再加工下就可以用了,比手工做方便很多啊。
代码看不太懂,我慢慢消化。。
作者: terse 时间: 2014-1-18 00:04
回复 12# bat好强大
对于楼主的表述有些是靠猜测的
这里难道不是把 除T3、T4.txt以外的TXT文件都显示吗?
输出到文本的话 就重定向输出吧
要排除的文件大概多少 几十个 还是上千呢? 太多的话可以先写入文本 然后排除
另对于输出内容的错误格式 没明确的指出 重复行可以理解
对于一楼样本期望输出是每行7个字符吗;这里原文件每行字符范围多少?小于或大于7个字符怎么处理
输出到temp.log- @ECHO OFF
- (for /f "delims=" %%i in ('DIR /b T*.txt^|findstr /ivx "T[3-4].txt"') do (
- for /f "usebackq delims=" %%j in ("%%i") do (
- if not defined %%j echo %%j
- set "%%j=1"
- )
- ))>temp.log
复制代码
作者: bat好强大 时间: 2014-1-20 10:03
本帖最后由 bat好强大 于 2014-1-20 10:05 编辑
回复 14# terse
这里难道不是把 除T3、T4.txt以外的TXT文件都显示吗?
是的是的,你的代码非常正确的实现了这个意图!
要排除的文件大概多少 几十个 还是上千呢? 太多的话可以先写入文本 然后排除
目前要排除的文件有近20个,并且这个清单会经常变动,请问如何实现 写入文本然后排除呢 ?
另对于输出内容的错误格式 没明确的指出 重复行可以理解
对于一楼样本期望输出是每行7个字符吗;这里原文件每行字符范围多少?小于或大于7个字符怎么处理
1、原文件是1列n行,每行7个字符。2、输出期望是7个字符一行。3、可能是两个txt之间的衔接问题,造成合并后文本出现一行14个字符的情况。4、希望把14个字符的行截断为两行。5、在合并后的文档里,可能有内容完全相同的两行或多行,需要只保留其中一行。
非常感谢你的回复! 抱歉问题没有说清楚, 我在 6楼 放了一个.txt 合并后的文件片断,请你看一下!
作者: terse 时间: 2014-1-20 14:08
回复 15# bat好强大 - @ECHO OFF
- :: 要排除的文件名没规律 所以在下面列出部分排除文件
- :: 可自行修改 也可自己预先写入文件
- ::t3.txt
- ::t4.txt
- ::t8.txt
- ::t6.txt
- (for /f "delims=:" %%i in ('findstr /ix ":.*\.txt" "%~0"') do echo %%i)>#
- (for /f "delims=" %%i in ('DIR /b T*.txt^|findstr /ivxg:"#"') do (
- for /f "usebackq delims=" %%j in ("%%i") do (
- if not defined %%j echo %%j
- set "%%j=1"
- )
- ))>temp.log
- del #
- pause
复制代码
这里生成的 temp.log 是否预想中的?
作者: bat好强大 时间: 2014-1-20 15:07
回复 16# terse
犀利! 和我想要的完全一样啊, 你太强大了!
生成的.log里,每行字符排列的很规整,看起来赏心悦目 赞!
在看到这段代码的运行结果以前,我不会相信注释内容,能作为参数的
作者: shunshunshun 时间: 2015-8-30 15:16
简单
1,要么移动move T3 T4txt
2,要么删除T3 T4txt
3,copy d:\xx\*.txt d:\xx\合并所有的TXT.txt
作者: shunshunshun 时间: 2015-8-30 15:18
如果 不想合并的过多。那先把所有的TXT名,弄到EXCEL里。然后再编辑排序
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |