标题: 如何用批处理去除txt里的TAB空格定界符然后合并txt? [打印本页]
作者: tracyallen1 时间: 2011-1-23 15:44 标题: 如何用批处理去除txt里的TAB空格定界符然后合并txt?
具体如下:假定工作目录为d:\workdir,备份目录为e:\workdirbak,目的目录为e:\transdir(做传输用)
从数据库每天会导出生成两个txt,文件名为fffffffffffffffyyyymmddnna1.txt和fffffffffffffffyyyymmddnna2.txt,文件名长度为27位(开头是15位的一串字符串),文件中每行使用了TAB做定界符或者|作为定界符
先要去除2个文件(%a1.txt和%a2.txt)里每行中的TAB空格或者|定界符,然后再将两个txt合并为1个fffffffffffffffyyyymmddnn.txt,放入transdir。
合并后将两个源文件从workdir复制至workdirbak,将workdir下的源文件删除。
yyyy-年,mm-月,dd-日,nn-序号
[ 本帖最后由 tracyallen1 于 2011-1-23 17:56 编辑 ]
作者: hanyeguxing 时间: 2011-1-23 15:56
只处理当天的,还是全部的?
作者: tracyallen1 时间: 2011-1-23 16:05
回版主,是否可以按照yyyymmddnn合并,数据一般是一天生成一个批号01,但是有可能是几天再去批处理一下。即在D盘下,有可能有fff2011012301a1.txt,fff2011012301a2.txt,fff2011012201a1.txt,fff2011012201a2.txt。
然后我批处理执行完后变成了2个txt,fff2011012301.txt和fff2011012201.txt。
作者: hanyeguxing 时间: 2011-1-23 16:16
- @echo off&setlocal enabledelayedexpansion
- for %%a in (*.txt) do (
- set "a=%%~na"
- if "!a:~14,1!"=="1" if exist "!a:~0,14!2.txt" if not exist "!a:~0,13!.txt" (
- call:a "!a:~0,14!" "!a:~0,13!" 1
- call:a "!a:~0,14!" "!a:~0,13!" 2
- ))
- exit
- :a
- (for /f "usebackq delims=" %%b in ("%~1%3.txt") do (
- set "b=%%b"
- set "b=!b:|=!"
- set "b=!b: =!"
- set "b=!b: =!"
- echo !b!
- ))>>"%~2.txt"
复制代码
1,set "b=!b: =!"中为制表符
2,分别删除管道、空格、制表符,楼主可以根据自己需要选择
3, if not exist "!a:~0,13!.txt" 为防止重复合并,楼主可以根据需要选用
4,如果合并后要删除源文件,则:- @echo off&setlocal enabledelayedexpansion
- for %%a in (*.txt) do (
- set "a=%%~na"
- if "!a:~14,1!"=="2" if not exist "!a:~0,13!.txt" (
- call:a "!a:~0,14!" "!a:~0,13!" 1
- call:a "!a:~0,14!" "!a:~0,13!" 2
- del "%%a"
- del "!a:~0,14!1.txt"
- ))
- exit
- :a
- (for /f "usebackq delims=" %%b in ("%~1%3.txt") do (
- set "b=%%b"
- set "b=!b:|=!"
- set "b=!b: =!"
- set "b=!b: =!"
- echo !b!
- ))>>"%~2.txt"
复制代码
[ 本帖最后由 hanyeguxing 于 2011-1-23 16:33 编辑 ]
作者: tracyallen1 时间: 2011-1-23 16:29
谢谢版主!我试下~~
作者: tracyallen1 时间: 2011-1-23 16:49
斑竹,刚才实验成功了,非常谢谢。
现在还想问下,我的文件名要使用15个f,而非现在的3个f,请问如何修改,是将26替换14,25替换13吗?
还有其他地方需要改吗
作者: hanyeguxing 时间: 2011-1-23 17:12 标题: 回复 6楼 的帖子
如果楼主说的文件包括源文件两个以及生成后的文件,则可以这样改
作者: tracyallen1 时间: 2011-1-23 17:25
请问版主,我想把源文件目录设为D:\WORKDIR,目的目录设为E:\TRANSDIR,然后想处理完后将文件移到E:\WORKDIRBAK
我用你的代码改了下if not exist "e:\transdir\!a:~0,13!.txt" ,"e:\transdir\%~2.txt",不知道这样改对不对,还有这个复制的命令是用copy吗
- @echo off&setlocal enabledelayedexpansion
- for %%a in (*.txt) do (
- set "a=%%~na"
- if "!a:~14,1!"=="2" if not exist "e:\transdir\!a:~0,13!.txt" (
- call:a "!a:~0,14!" "!a:~0,13!" 1
- call:a "!a:~0,14!" "!a:~0,13!" 2--这里应该如何写?
- del "%%a"
- del "!a:~0,14!1.txt"
- ))
- exit
- :a
- (for /f "usebackq delims=" %%b in ("%~1%3.txt") do (
- set "b=%%b"
- set "b=!b:|=!"
- set "b=!b: =!"
- set "b=!b: =!"
- echo !b!
- ))>>"e:\transdir\%~2.txt"
复制代码
作者: hanyeguxing 时间: 2011-1-23 17:42
1,set "b=!b: =!"中为制表符
2,分别删除管道、空格、制表符,楼主可以根据自己需要选择- @echo off&setlocal enabledelayedexpansion
- rem 源文件所在目录
- cd/d "D:\WORKDIR"
- rem 源备份目录
- set "s=E:\WORKDIRBAK\"
- rem 合并后文件存放目录
- set "r=E:\TRANSDIR\"
- rem 设置处理的文件类型
- set "t=.txt"
- if not exist "%r%" md "%r%"
- if not exist "%s%" md "%s%"
- ::文件名解析
- for %%a in (*%t%) do (
- set "a=%%~na"&set "a1=!a:~0,26!"&set "a2=!a:~0,25!"
- if "!a:~26,1!"=="2" if not exist "%r%!a2!%t%" (
- call:b 1
- call:b 2
- ))
- exit
- :b:文本处理
- (for /f "usebackq delims=" %%b in ("%a1%%1%t%") do (
- set "b=%%b"&set "b=!b:|=!"&set "b=!b: =!"&set "b=!b: =!"
- echo !b!
- ))>>"%r%%a2%%t%"
- move "%a1%%1%t%" "%s%"
复制代码
[ 本帖最后由 hanyeguxing 于 2011-1-23 18:26 编辑 ]
作者: tracyallen1 时间: 2011-1-23 17:57 标题: 回复 9楼 的帖子
我更新了,版主。。。
作者: tracyallen1 时间: 2011-1-23 18:16 标题: 回复 9楼 的帖子
成功了,非常感谢版主!
我最近想学SHELL,看样子批处理也得学习学习,好东西!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |