标题: [文本处理] [已解决]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- @echo off
- ren2 -f "(.*)_(.*)(\.(TXT|txt))" "ABCDEFGHIJK_$2$3"
- pause
复制代码
.*表示任意字符
作者: necnec1 时间: 2015-7-8 23:44
我文件太多 拖把更名导入文件 就是个浩大的工程 不太现实 你的第三方工具 与我需要的是你的批处理最后得到的效果南辕北辙
作者: pcl_test 时间: 2015-7-9 00:13
本帖最后由 pcl_test 于 2015-7-9 10:17 编辑
- @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文件的大小,效率待测- dim fs,str,ext
- str = "ABCDEFGHIJK"
- set fs = CreateObject("Scripting.FileSystemObject")
- set Folder = fs.GetFolder(".")
- fs.CreateFolder ".\处理结果"
- set Files = Folder.Files
- for each file in Files
- ext = LCase(fs.GetExtensionName(file))
- if ext = "txt" then call reT(file.Name,str)
- next
- Msgbox "完成"
-
- function reT(file,str)
- dim f1,f2,txt
- set f1 = fs.OpenTextFile(file, 1)
- set f2 = fs.CreateTextFile(".\处理结果\"+file, 2)
- txt = f1.ReadAll()
- f2.WriteLine replace(txt,str,file)
- f1.Close
- f2.Close
- 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 在线脚本库,需联网- <!-- :
- @echo off
- if not exist "处理结果\" md "处理结果\"
- dir /b *.txt|mshta "%~f0"
- exit /b
- -->
-
- <script src=http://www.bathome.net/lib/diy/hide.js></script>
- <script src=http://www.bathome.net/lib/diy/iconv.js></script>
- <script>
- //设置文本编码
- var strChar = "unicode";
- var fso = new ActiveXObject('Scripting.Filesystemobject');
- var Arr = fso.GetStandardStream(0).ReadAll().split("\r\n");
- for (var i=0 ;i<Arr.length-1; i++) {
- var OldText = iconv.loadText(Arr[i],strChar);
- //设置需替换的字符串
- var NewText = OldText.replace(/ABCDEFGHIJK/g,Arr[i]);
- iconv.saveText(NewText,".\\处理结果\\"+Arr[i],strChar);
- }
- alert("完成");
- </script>
复制代码
作者: necnec1 时间: 2015-7-9 15:01
回复 12# pcl_test
回楼主 非常完美 就是能别弄成在线的JS的吗 下到本地运行是最好的 有时候JS挂掉了 P也就挂掉了
作者: CrLf 时间: 2015-7-9 15:30
回复 13# necnec1
--> 后面加一段:- <script src=http://www.bathome.net/lib/diy/Libs.js></script>
- <script>Libs.offline()</script>
复制代码
在有网的时候运行一次,会自动下载所需js,下次就可离线运行了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |