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

[文本处理] 批处理如何批量替换文件中的特殊符号?

目前每天都会产生一个以YYYYMMDD日期为名的文件夹,文件夹中有很多不同文件名的TXT 文本文件。 这些文件内容都很规则,分三种:一类是用,号分隔; 一类是用| 分隔;  第三类是用&&号分隔,每个文件 只包含其中一种符号。

例如: A.TXT 中的内容是 13312350,231,5464

B .txt 中内容是  456123&&545456&&422878

C.TXT 中的内容是  13343045574|4567|0|56|5

现在的目的是要批量替换这些TXT文件,将这些有 , |  && 的文件全部替换成 TAB 键。 即用TAB 键做分隔符,这样就可以插到数据库中了。

每天都要做此事,而且文件夹中文件也很多,每天都有上百个这些文件,所以想求求大家看能不能帮助写个批处理,

小弟谢过了。现在做这事都烦死了。快吐了,

不想用第三方工具。纯DOS 的。麻烦大家了

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. md tmp
  4. for %%a in (*.txt) do (
  5.   for /f "usebackq delims=" %%b in (%%a) do (
  6.     set str=%%b
  7.     for %%c in (^&^& ^|) do set str=!str:%%c=        ! & set str=!str:^,=        !
  8.     echo !str!>>tmp\%%~nxa
  9. )
  10. )
复制代码
看看这个合你要求不,把str=!str:%%c=        !和set str=!str:^,=        ! 的空格改为TAB。
为了避免出现意外,在当前目录下生成一个tmp文件夹,并在TMP里生成替换过的文本。
只要把这个批处理和你要整理的文本放在同一个目录下就可以了

[ 本帖最后由 sgaizxt001 于 2010-7-15 08:22 编辑 ]
努力学习,努力挣分

TOP

注意:先把[tab]改成[Tab]键
          该代码放在你要处理的目录的上一级目录里

  1. @echo off&setlocal enabledelayedexpansion
  2. ::把[Tab] 改成[Tab]键,因为论坛发不了[Tab]键
  3. set "tab=[Tab]"
  4. ::取日期格式,我的系统是这样的“2010-07-15 星期四”,你可以根据你的情况改改吧
  5. for /f "tokens=1-3 delims=- " %%a in ("!date!")  do set dire=%%a%%b%%c
  6. for %%a in (!dire!\*.txt) do (
  7. rem 首先根据第一行判断是何种符号
  8.   set /p var=<"%%a"
  9.   set fh=
  10.   for %%b in ("," "&&" "|") do (
  11.     if "!var:%%~b=!" neq "!var!" set fh=%%b
  12.   )
  13. rem 符合规则的话,进行替换,并存到临时文件*-new.tmp
  14.   for %%b in (!fh!) do (
  15. (    for /f "tokens=*" %%c in ('type "%%a"') do (
  16.         set str=%%c
  17.         echo;!str:%%~b=%tab%!
  18.     )
  19. )>"%%~dpna-new.tmp"
  20.   )
  21. )
  22. rem 把临时文件.tmp,改成.txt,
  23. if exist !dire!\*-new.txt del !dire!\*-new.txt
  24. ren !dire!\*.tmp *.txt 2>nul
  25. echo;新文件在原文件名后面加了-new
  26. echo;OK~~
  27. pause
复制代码

[ 本帖最后由 netbenton 于 2010-7-15 07:55 编辑 ]

TOP

谢谢两位,我现在就去式试

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set "Tab= "
  3. for %%a in (*.txt) do (
  4.   (
  5.     for /f "usebackq delims=" %%i in (%%a) do (
  6.         set str=%%i
  7.         for %%j in ("," "&&" "|") do set "str=!str:%%~j=%tab%!"
  8.         echo !str!
  9.     )
  10.   )>~tmp%%~na.x
  11.     move "~tmp%%~na.x" "%%a"
  12. )
复制代码

TOP

回复 3楼 的帖子

非常感谢大家,netbenton的脚本可以用,但运行时间太长了,我的每个TXT文件大小约有20-30M,有上百个,通过您的带码批量处理非常非常慢。可不可以提高速度啊。

TOP

回复 6楼 的帖子

把这段代码:
(    for /f "tokens=*" %%c in ('type "%%a"') do (
        set str=%%c
        echo;!str:%%~b=%tab%!
    )
)>"%%~dpna-new.tmp"

改成下面的,可以提点速度,还要更快的话,请用三方吧~~
  1. (     for /f "usebackq tokens=*" %%c in ("%%a") do (
  2.         set str=%%c
  3.         echo;!str:%%~b=%tab%!
  4.     )
  5. )>"%%~dpna-new.tmp"
复制代码

[ 本帖最后由 netbenton 于 2010-7-16 18:57 编辑 ]

TOP

返回列表