Board logo

标题: [文本处理] [已解决]BAT批量替换文件名 求助 [打印本页]

作者: necnec1    时间: 2015-7-8 21:40     标题: [已解决]BAT批量替换文件名 求助

本帖最后由 necnec1 于 2015-7-9 15:46 编辑

一个文本文件  名称如下
Z5M0002889_CQEFD1503090015500.txt  

文本内容里有一个关键字是  ABCDEFGHIJK

有没有什么办法可以将 ABCDEFGHIJK替换成Z5M0002889_CQEFD1503090015500.txt

由于文件有大概50多万个  有没有什么更有效率的办法可以解决?
作者: xp3000    时间: 2015-7-8 23:31

本帖最后由 xp3000 于 2015-7-8 23:42 编辑

这个最好用程序,拖把更名器,在第2个的替换项那里填写,然后点上面的更名,应用
\S+) _ (\S+)
替换
ABCDEFGHIJK_$2

拖把改名工具正则表达式含义:
:判断是否为正则表达式
\S表示非空格的任意字符
+表示重复1次或更多次
替换内容含义:
$1表示第1个括号的内容
$2表示第2个括号的内容


第三方工具ren2.exe
  1. @echo off
  2. ren2 -f "(.*)_(.*)(\.(TXT|txt))" "ABCDEFGHIJK_$2$3"
  3. pause
复制代码
.*表示任意字符
作者: necnec1    时间: 2015-7-8 23:44

我文件太多 拖把更名导入文件 就是个浩大的工程 不太现实  你的第三方工具 与我需要的是你的批处理最后得到的效果南辕北辙
作者: pcl_test    时间: 2015-7-9 00:13

本帖最后由 pcl_test 于 2015-7-9 10:17 编辑
  1. @for %%a in (*.txt) do @sed -i "s/ABCDEFGHIJK/%%~nxa/g" "%%a"
复制代码
http://batch-cn.qiniudn.com/tool/sed.exe
作者: xp3000    时间: 2015-7-9 00:46

呃,理解错误,文本替换,你这样用字符串批量替换工具多快,有个编辑工具如果批量操作麻烦点,要建处理项目,添加文件夹,勾选子文件夹,我电脑试过单个文本200MB,8个字符串自定义替换规则,替换10万行用了三分半,批量没试
作者: pcl_test    时间: 2015-7-9 01:09

本帖最后由 pcl_test 于 2015-7-9 10:03 编辑

vbs,然并不知道每个txt文件的大小,效率待测
  1. dim fs,str,ext
  2. str = "ABCDEFGHIJK"
  3. set fs = CreateObject("Scripting.FileSystemObject")
  4. set Folder = fs.GetFolder(".")
  5. fs.CreateFolder ".\处理结果"
  6. set Files = Folder.Files
  7. for each file in Files
  8.     ext = LCase(fs.GetExtensionName(file))
  9.     if ext = "txt" then call reT(file.Name,str)
  10. next
  11. Msgbox "完成"
  12. function reT(file,str)
  13. dim f1,f2,txt
  14. set f1 = fs.OpenTextFile(file, 1)
  15. set f2 = fs.CreateTextFile(".\处理结果\"+file, 2)
  16. txt = f1.ReadAll()
  17. f2.WriteLine replace(txt,str,file)
  18. f1.Close
  19. f2.Close
  20. end function
复制代码

作者: necnec1    时间: 2015-7-9 09:42

本帖最后由 necnec1 于 2015-7-9 09:45 编辑

回复 4# pcl_test

回复pcl_test  你给的2个批处理 运行都无效 无任何反应
我就直接在文本文件里输入ABCDEFGHIJK  但是文本名貌似并没有被替换掉


我再把要求说一下 可能你没看明白
一个文本文件  文件名是 ABC  文本内容是 DEF    我需要把 DEF 替换成 ABC
作者: pcl_test    时间: 2015-7-9 09:58

回复 7# necnec1
测试没有问题
4楼的代码
有没下载sed?替换的字符串某些字符有没转义?
6楼
单个txt文件多大?有没保存为vbs?
作者: necnec1    时间: 2015-7-9 10:16

本帖最后由 necnec1 于 2015-7-9 10:18 编辑

回复 8# pcl_test

@for %%a in (*.txt) do @sed -i "s/ABCDEFGHIJK/%%~na/g" "%%a"

这个批处理 我也不知道问题在哪里    我自己新建一个TXT  内容只有ABCDEFGHIJK  毫无压力的就得到我要的结果

但是我50万的文本文件  格式是UNICODE的 运行批处理以后  文本本来有56行的  结果变成8行   剩下的内容没有了 我也不知道问题在哪
再用UNICODE的文本文件 内容只有ABCDEFGHIJK 好像运行没反应

pcl_test 可不可以让批处理兼容GB GBK 和UNICODE 3种格式?
作者: pcl_test    时间: 2015-7-9 10:20

回复 9# necnec1

打包上传一个你的UNICODE编码的源文件,可发网盘链接
作者: necnec1    时间: 2015-7-9 10:36

http://pan.baidu.com/s/1mgGdY6O
这是测试样本
作者: pcl_test    时间: 2015-7-9 14:15

本帖最后由 pcl_test 于 2015-7-9 14:26 编辑

依赖 js 在线脚本库,需联网
  1. <!-- :
  2. @echo off
  3. if not exist "处理结果\" md "处理结果\"
  4. dir /b *.txt|mshta "%~f0"
  5. exit /b
  6. -->
  7. <script src=http://www.bathome.net/lib/diy/hide.js></script>
  8. <script src=http://www.bathome.net/lib/diy/iconv.js></script>
  9. <script>
  10. //设置文本编码
  11. var strChar = "unicode";
  12. var fso = new ActiveXObject('Scripting.Filesystemobject');
  13. var Arr = fso.GetStandardStream(0).ReadAll().split("\r\n");
  14. for (var i=0 ;i<Arr.length-1; i++) {
  15. var OldText = iconv.loadText(Arr[i],strChar);
  16. //设置需替换的字符串
  17. var NewText = OldText.replace(/ABCDEFGHIJK/g,Arr[i]);
  18. iconv.saveText(NewText,".\\处理结果\\"+Arr[i],strChar);
  19. }
  20. alert("完成");
  21. </script>
复制代码

作者: necnec1    时间: 2015-7-9 15:01

回复 12# pcl_test


    回楼主 非常完美   就是能别弄成在线的JS的吗 下到本地运行是最好的  有时候JS挂掉了 P也就挂掉了
作者: CrLf    时间: 2015-7-9 15:30

回复 13# necnec1


--> 后面加一段:
  1. <script src=http://www.bathome.net/lib/diy/Libs.js></script>
  2. <script>Libs.offline()</script>
复制代码
在有网的时候运行一次,会自动下载所需js,下次就可离线运行了




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