Board logo

标题: [文本处理] BAT脚本如何批量修改CSV内的文档内容? [打印本页]

作者: zhengwei007    时间: 2012-7-18 15:50     标题: BAT脚本如何批量修改CSV内的文档内容?

要求:通过批处理将文本文件中的所有
,TS修改为,S
,TE修改为,E
,TR修改为,R
,TP修改为,P
就是将第4列所有的T去掉,其它不变!!

朋友提供了一些代码,但是无法实现,请大侠们协助!
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=, tokens=1-4" %%i in ('dir /s/b *.csv') do (
  3. rem File Encoding Is CP936
  4. set "lastchar=%%l"
  5. set lastchar=!lastchar:T=!
  6. echo %%i,%%j,%%k,!lastchar!
  7. )
  8. pause
复制代码
我将文件上传,给大家测试一下,谢谢!
作者: 乱码    时间: 2012-7-18 16:04

path = "E:\文件"
Set fso = CreateObject("Scripting.FileSystemObject")
Set re = New RegExp
re.Global =
True
'是否返回所有匹配结果
re.MultiLine = True '是否多行模式
re.Pattern = "(\d+,)T"
For Each x In fso.GetFolder(path).Files
'遍历指定文件夹里的所有文件
   
word = re.Replace(x.OpenAsTextStream.ReadAll,"$1") '替换
   
x.OpenAsTextStream(2).Write word '重新写入
Next

MsgBox "OK"

这个是VBS脚本,我不会bat
没有具体的测试数据,我简单测试了下,可以实现的、
如果不放心,你复制一份测试一下先、
作者: zhengwei007    时间: 2012-7-18 16:43

请问这些代码的运行环境在哪?是用宏还是要安装VB?
作者: zhengwei007    时间: 2012-7-18 16:43

请问这些代码的运行环境在哪?是用宏还是要安装VB?
作者: 乱码    时间: 2012-7-18 16:46

回复 3# zhengwei007

新建 文本文档 双击打开,把代码复制过去,保存为 “批量修改.VBS”
双击运行
显示OK 就好了

作者: zhengwei007    时间: 2012-7-18 17:06

的确可以,请问PATH后面想设置成当前路径,不管拷贝到哪都能直接运行,应该改成什么?我试过留空或..好像不行。
作者: 乱码    时间: 2012-7-18 17:09

回复 6# zhengwei007


   . 表示当前目录、path = "."
作者: zhengwei007    时间: 2012-7-18 17:15

本帖最后由 zhengwei007 于 2012-7-18 17:18 编辑

可以了,谢谢朋友。原来还有VBS这东西,一直没用过!而且这修改速度简直秒杀,5万多文件,不到50秒搞定。
作者: zhengwei007    时间: 2012-7-18 17:18

请问你的代码如何实现只修改第4列的??
作者: 乱码    时间: 2012-7-18 17:22

回复 9# zhengwei007

"(\d+,)T" 正则表达式,匹配一类而不是一列
这个正则的意思是 只要是  数字,T  这样的数据都只取他的数字和,
比如 123,TB 只留下 123,B
作者: zhengwei007    时间: 2012-7-18 17:24

高手啊~能想到这来,真是经验之谈,学习了!
作者: CrLf    时间: 2012-7-19 02:55

需要第三方 sed:
  1. for %%a in (*.csv) do sed -i "s/,[^],T\([SERP]\)$/,\1/g" "%%a"
复制代码

作者: Heric    时间: 2012-7-22 06:32

@echo off&setlocal enabledelayedexpansion

for /f "delims=" %%i in ('dir /b *.csv') do (
    set name=%%i
    for /f "tokens=1-4 delims=," %%a in (!name!) do (
            set one=%%a
            set two=%%b
            set three=%%c
            set lastchar=%%d
            set lastchar=!lastchar:T=!
            echo !one!,!two!,!three!,!lastchar!>>new!name!
    )
)   
echo Done !! and press any to exit
pause
作者: Heric    时间: 2012-7-22 09:07

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b *.csv') do (
  3.     set name=%%i
  4.     for /f "tokens=1-4 delims=," %%a in (!name!) do (
  5.             set one=%%a
  6.             set two=%%b
  7.             set three=%%c
  8.             set lastchar=%%d
  9.             set lastchar=!lastchar:T=!
  10.             echo !one!,!two!,!three!,!lastchar!>>new!name!
  11.     )
  12. )   
  13. echo Done !! and press any to exit
  14. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2