找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31745|回复: 13

[文本处理] BAT脚本如何批量修改CSV内的文档内容?

[复制链接]
发表于 2012-7-18 15:50:12 | 显示全部楼层 |阅读模式
要求:通过批处理将文本文件中的所有
,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:16 | 显示全部楼层
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
没有具体的测试数据,我简单测试了下,可以实现的、
如果不放心,你复制一份测试一下先、
 楼主| 发表于 2012-7-18 16:43:20 | 显示全部楼层
请问这些代码的运行环境在哪?是用宏还是要安装VB?
 楼主| 发表于 2012-7-18 16:43:37 | 显示全部楼层
请问这些代码的运行环境在哪?是用宏还是要安装VB?
发表于 2012-7-18 16:46:01 | 显示全部楼层
回复 3# zhengwei007

新建 文本文档 双击打开,把代码复制过去,保存为 “批量修改.VBS”
双击运行
显示OK 就好了
 楼主| 发表于 2012-7-18 17:06:09 | 显示全部楼层
的确可以,请问PATH后面想设置成当前路径,不管拷贝到哪都能直接运行,应该改成什么?我试过留空或..好像不行。
发表于 2012-7-18 17:09:19 | 显示全部楼层
回复 6# zhengwei007


   . 表示当前目录、path = "."
 楼主| 发表于 2012-7-18 17:15:58 | 显示全部楼层
本帖最后由 zhengwei007 于 2012-7-18 17:18 编辑

可以了,谢谢朋友。原来还有VBS这东西,一直没用过!而且这修改速度简直秒杀,5万多文件,不到50秒搞定。
 楼主| 发表于 2012-7-18 17:18:46 | 显示全部楼层
请问你的代码如何实现只修改第4列的??
发表于 2012-7-18 17:22:26 | 显示全部楼层
回复 9# zhengwei007

"(\d+,)T" 正则表达式,匹配一类而不是一列
这个正则的意思是 只要是  数字,T  这样的数据都只取他的数字和,
比如 123,TB 只留下 123,B
 楼主| 发表于 2012-7-18 17:24:51 | 显示全部楼层
高手啊~能想到这来,真是经验之谈,学习了!
发表于 2012-7-19 02:55:53 | 显示全部楼层
需要第三方 sed:
  1. for %%a in (*.csv) do sed -i "s/,[^],T\([SERP]\)$/,\1/g" "%%a"
复制代码
发表于 2012-7-22 06:32:17 | 显示全部楼层
@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
发表于 2012-7-22 09:07:13 | 显示全部楼层
  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



复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 04:12 , Processed in 0.021801 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表