Board logo

标题: 如何用批处理去除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

  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (*.txt) do (
  3.     set "a=%%~na"
  4.     if "!a:~14,1!"=="1" if exist "!a:~0,14!2.txt" if not exist "!a:~0,13!.txt" (
  5.         call:a "!a:~0,14!" "!a:~0,13!" 1
  6.         call:a "!a:~0,14!" "!a:~0,13!" 2
  7. ))
  8. exit
  9. :a
  10. (for /f "usebackq delims=" %%b in ("%~1%3.txt") do (
  11.     set "b=%%b"
  12.     set "b=!b:|=!"
  13.     set "b=!b: =!"
  14.     set "b=!b:        =!"
  15.     echo !b!
  16. ))>>"%~2.txt"
复制代码
1,set "b=!b:        =!"中为制表符
2,分别删除管道、空格、制表符,楼主可以根据自己需要选择
3, if not exist "!a:~0,13!.txt" 为防止重复合并,楼主可以根据需要选用
4,如果合并后要删除源文件,则:
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (*.txt) do (
  3.     set "a=%%~na"
  4.     if "!a:~14,1!"=="2" if not exist "!a:~0,13!.txt" (
  5.         call:a "!a:~0,14!" "!a:~0,13!" 1
  6.         call:a "!a:~0,14!" "!a:~0,13!" 2
  7.         del "%%a"
  8.         del "!a:~0,14!1.txt"
  9. ))
  10. exit
  11. :a
  12. (for /f "usebackq delims=" %%b in ("%~1%3.txt") do (
  13.     set "b=%%b"
  14.     set "b=!b:|=!"
  15.     set "b=!b: =!"
  16.     set "b=!b:        =!"
  17.     echo !b!
  18. ))>>"%~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吗
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (*.txt) do (
  3.     set "a=%%~na"
  4.     if "!a:~14,1!"=="2" if not exist "e:\transdir\!a:~0,13!.txt" (
  5.         call:a "!a:~0,14!" "!a:~0,13!" 1
  6.         call:a "!a:~0,14!" "!a:~0,13!" 2--这里应该如何写?
  7.         del "%%a"
  8.         del "!a:~0,14!1.txt"
  9. ))
  10. exit
  11. :a
  12. (for /f "usebackq delims=" %%b in ("%~1%3.txt") do (
  13.     set "b=%%b"
  14.     set "b=!b:|=!"
  15.     set "b=!b: =!"
  16.     set "b=!b:        =!"
  17.     echo !b!
  18. ))>>"e:\transdir\%~2.txt"
复制代码

作者: hanyeguxing    时间: 2011-1-23 17:42

1,set "b=!b:        =!"中为制表符
2,分别删除管道、空格、制表符,楼主可以根据自己需要选择
  1. @echo off&setlocal enabledelayedexpansion
  2. rem 源文件所在目录
  3. cd/d "D:\WORKDIR"
  4. rem 源备份目录
  5. set "s=E:\WORKDIRBAK\"
  6. rem 合并后文件存放目录
  7. set "r=E:\TRANSDIR\"
  8. rem 设置处理的文件类型
  9. set "t=.txt"
  10. if not exist "%r%" md "%r%"
  11. if not exist "%s%" md "%s%"
  12. ::文件名解析
  13. for %%a in (*%t%) do (
  14.     set "a=%%~na"&set "a1=!a:~0,26!"&set "a2=!a:~0,25!"
  15.     if "!a:~26,1!"=="2" if not exist "%r%!a2!%t%" (
  16.         call:b 1
  17.         call:b 2
  18. ))
  19. exit
  20. :b:文本处理
  21. (for /f "usebackq delims=" %%b in ("%a1%%1%t%") do (
  22.     set "b=%%b"&set "b=!b:|=!"&set "b=!b: =!"&set "b=!b:        =!"
  23.     echo !b!
  24. ))>>"%r%%a2%%t%"
  25. 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