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

[文本处理] 文本文档批处理替换

[复制链接]
发表于 2018-12-18 15:21:02 | 显示全部楼层 |阅读模式
求一个批处理语句,没人会吗?网上的那些工具都没用。如图所示有一个文本2,里面有好多个AA,有一个文本1,里面有对应个数的数据,要求把文本2的AA用文本1的数据按顺讯替换了,换后如图3那样
发表于 2018-12-18 15:31:19 | 显示全部楼层
1.txt和2.txt打包压缩之后传上来,我试试。
 楼主| 发表于 2018-12-18 15:41:21 | 显示全部楼层
回复 2# Batcher

这个只是个例子,实际中有很多的数据
 楼主| 发表于 2018-12-18 15:45:54 | 显示全部楼层
回复 2# Batcher


文本2里的内容可以是随便的,主要是有,AA,这个字符,用文本1的数据按顺序替换,谢谢!
发表于 2018-12-18 16:03:43 | 显示全部楼层
本帖最后由 flashercs 于 2018-12-18 16:11 编辑

上传的乱码了;
如果文本1的行数比文本2中的AA数量少,怎么办?
 楼主| 发表于 2018-12-18 16:15:01 | 显示全部楼层
回复 5# flashercs

可能我们公司加密了,两个数量是相等的,要是不等就显示一个错误给我就好了,谢谢!!!!
发表于 2018-12-18 16:39:26 | 显示全部楼层
回复 6# duancaile


    两个文件的内容试试能直接发出来吗
 楼主| 发表于 2018-12-18 16:44:57 | 显示全部楼层
回复 7# Batcher

文本1内容
1,
2,
3,
4,
5,



文本2内容
47940409,AA,RHEIOFOKDSNFLK,49UI03OFLKFNKL,AA,FKLNBCVNKBNRTOTO,AA,9409UOIFJKLNOJOICVO,AA,FKNVLKNVPTQJOJRANFNL,AA,NFKJNKNVBNBVOREU39U30
发表于 2018-12-18 16:46:35 | 显示全部楼层
替换AA.js ,放到1.txt 2.txt同目录,生成结果3.txt
  1. var fso = WScript.CreateObject('Scripting.FileSystemObject');
  2. var file1 = '1.txt';
  3. var file2 = '2.txt';
  4. var file3 = '3.txt';
  5. var curDir = WScript.CreateObject('WScript.Shell').CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName);
  6. var ts1 = fso.OpenTextFile(file1, 1, false, -2);
  7. var ts2 = fso.OpenTextFile(file2, 1, false, -2);
  8. var ts3 = fso.OpenTextFile(file3, 2, true, -2);
  9. if (!ts2.AtEndOfStream) {
  10.   ts3.Write(ts2.ReadAll().replace(/AA/g, function ($0) {
  11.     return ts1.AtEndOfStream ? $0 : ts1.ReadLine();
  12.   }));
  13. }
  14. ts1.close();
  15. ts2.close();
  16. ts3.close();
复制代码

评分

参与人数 1技术 +1 收起 理由
duancaile + 1 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2018-12-18 16:46:47 | 显示全部楼层
回复 7# Batcher



1
2
3
4
5
文本1内容,就5个数字,不带符号
发表于 2018-12-18 17:35:17 | 显示全部楼层
本帖最后由 yhcfsr 于 2018-12-18 17:40 编辑

POWERSHELL,保存为ps1格式,与要处理文件放一起,右键执行
  1. $file1='1.txt';#替换数据文本
  2. $file2='2.txt';#需要被替换的源文件
  3. $key='AA';#需要被替换的关键字

  4. $ontent_file1=[io.file]::ReadAllLines($file1);#读文件
  5. $ontent_file2=[io.file]::ReadAllText($file2);#读文件

  6. $result='';$n=0;$lenKey=$key.Length;#变量初始化

  7. while(1)
  8. {
  9. $i=$ontent_file2.IndexOf($key);#查询关键字的首位置
  10. if(($i -ne -1) -and ($ontent_file1[$n])){
  11.     $result+=$ontent_file2.Substring(0,$i)+$ontent_file1[$n];#替换关键字
  12.     $ontent_file2=$ontent_file2.Substring($i+$lenKey);#截取文本
  13. } else {$result+=$ontent_file2;break;}#不含关键字或数据文本结束,则跳出循环
  14.    $n++;
  15. }
  16. $result>'结果.TXT'
复制代码

评分

参与人数 1技术 +1 收起 理由
duancaile + 1 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2018-12-18 21:12:39 | 显示全部楼层
凑个热闹

  1. $Arr=gc 1.txt #1为纯数字文件;2为待替换文件,会读取整个文档内容。
  2. $Array=(((gc 2.txt) -join "`r`n").replace(',AA,',",AA,`t").split("`t"))
  3. (0..($Arr.count -1))|%{$Array[$_]=$Array[$_].Replace(',AA,',",$($Arr[$_]),")}
  4. $str=-join $Array
  5. $str|sc .\2.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
duancaile + 1 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2018-12-18 21:25:14 | 显示全部楼层
本帖最后由 523066680 于 2018-12-19 08:05 编辑
  1. use File::Slurp;
  2. my @t1 = read_file("1.txt");
  3. my $t2 = read_file("2.txt");
  4. grep { chomp } @t1;
  5. $t2=~s/,AA,/",".(shift @t1).","/ge;
  6. print $t2;
复制代码

评分

参与人数 1技术 +1 收起 理由
tigerpower + 1 文本处理perl实在是强!

查看全部评分

发表于 2018-12-19 09:31:54 | 显示全部楼层
下载busybox
  1. busybox sh -c "sed -b 's/,AA,/,\n,/g' 2.txt|paste -d'\n' - 1.txt|tr -d '\n'"
复制代码

评分

参与人数 1技术 +1 收起 理由
523066680 + 1 就知道会有一句话方案

查看全部评分

发表于 2018-12-19 11:05:06 | 显示全部楼层
回复 14# tigerpower


看到busybox就想起安卓busybox,现在手机安全加强了,解ROOT权限很繁琐(我用小米,刷了开发版系统)
后来发现有个叫 termux 的东西,不需要root,就可以安装/运行 clang nodejs python perl ,特别好用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 03:26 , Processed in 0.035417 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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