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

[文本处理] 如何利用批处理批量替换文本内不同内容的字符

[复制链接]
发表于 2012-5-2 19:44:22 | 显示全部楼层 |阅读模式
本帖最后由 Rasm 于 2012-5-3 16:19 编辑

1.txt的内容如下:

b097e703c2266df140b176158db7b967
f2af3073d7fd0d1389431660a213da03
23aa1cf3836221787a710682a5d5508e
b5be656a7060dd3525027d6763c33ca0
421912aca048bceb6f78c378775205d0
7aecf141564a45c1aaa10e1309a71e6d
9aa0b8e9f776639f84f688cc4cd75ef2

0592843fee8cdfc2b03e6cd7be40126b

2.txt的内容内容如下:

a#0cc175b9c0f1b6a831c399e269772661
000#c6f057b86584942e415435ffb1fa93d4
kwq#7aecf141564a45c1aaa10e1309a71e6d
006#568628e0d993b1973adc718237da6e93
777#f1c1592588411002af340cbaedd6fc33
hdf#9aa0b8e9f776639f84f688cc4cd75ef2
w07#4521058ddf92fa5b4795d756ec73117d

结果就是想把:

把1.txt的:7aecf141564a45c1aaa10e1309a71e6d替换为:kwq#7aecf141564a45c1aaa10e1309a71e6d
把1.txt的:9aa0b8e9f776639f84f688cc4cd75ef2替换为:hdf#9aa0b8e9f776639f84f688cc4cd75ef2
发表于 2012-5-2 20:58:54 | 显示全部楼层
如果2.txt的第二行是:
a123333         net123123123
这个是否需要替换?
发表于 2012-5-2 21:01:05 | 显示全部楼层
本帖最后由 ivor 于 2012-5-2 21:09 编辑

你的意思是1.txt中的行内容如果和2.txt中的第二列相符,就替换?
 楼主| 发表于 2012-5-2 21:22:43 | 显示全部楼层
本帖最后由 Rasm 于 2012-5-2 21:27 编辑

回复 3# ivor


    对,如何相符合就替换

不需要完全相符合

至少是1.txt的内容和2.txt的内容,后面的内容相符合
 楼主| 发表于 2012-5-2 21:24:26 | 显示全部楼层
回复 2# gawk


    如果2.txt的第二行是:
a123333         net123123123
这个是否需要替换?

这种就不替换
 楼主| 发表于 2012-5-2 21:27:06 | 显示全部楼层
本帖最后由 Rasm 于 2012-5-2 21:32 编辑

回复 2# gawk


    我的意思是说

如果文本2.txt “#”后面的内容符合1.txt那行的内容能够,那么就把1.txt那行的内容替换为2.txt那行的内容

如1.txt某一行的内容为:a1121aaaaa

2.txt某行的内容为:12388182#a1121aaaaa

那就把1.txt的“a1121aaaaa”替换为2.txt 的“12388182#a1121aaaaa”,并保存为3.txt

并且如果中间遇到不符合的就跳过或者过滤,继续下一行
发表于 2012-5-2 23:19:08 | 显示全部楼层
本来我以为楼主这个题很简单的,但是实际写代码却遇到很大的困难

让我再想想
发表于 2012-5-2 23:52:05 | 显示全部楼层
本帖最后由 CrLf 于 2012-5-3 17:31 编辑

实现是很容易,但是这效率...
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3.    set str=%%a
  4.    for /f "tokens=1* delims=#" %%b in (b.txt) do (
  5.       if %%a==%%c set str=%%b#%%c
  6.    )
  7.    setlocal enabledelayedexpansion
  8.    echo;!str!
  9.    endlocal
  10. )
  11. pause
复制代码
另,如果 a.txt 内容不长,b.txt 中的替换前长于替换后,而且要替换的内容中不含 = ! ~ * " 这几个特殊字符的话,可以试试这样:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.    set test=!str!
  4.    set str=!str! "%%a"
  5.    if !str!==!test! (
  6.       set str=%%a
  7.       for %%b in (!str!) do echo;%%~b
  8.    )
  9.    for /f "tokens=1* delims=#" %%b in (b.txt) do (
  10.       set str=!str:%%c=%%b#%%c!
  11.    )
  12. )
  13. for %%b in (!str!) do echo;%%~b
  14. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Rasm + 1 继续努力

查看全部评分

发表于 2012-5-3 00:58:49 | 显示全部楼层
回复 8# CrLf


看楼主的意思应该不是这个样子的
a.txt的第一行只跟b.txt的第一行(而不是全部行)比较
 楼主| 发表于 2012-5-3 04:59:52 | 显示全部楼层
回复 9# gawk


    好吧, 我突然想到了又一种比较好的比较方法

就是1.txt的内容比2.txt里的内容多

将1.txt和2.txt里的内容相比较

如果1.txt的内容存在2.txt里那行的内容,就将1.txt里面的内容替换为空格或者删除

不知道这样可以理解的了不
 楼主| 发表于 2012-5-3 05:06:00 | 显示全部楼层
本帖最后由 Rasm 于 2012-5-3 05:08 编辑

回复 9# gawk


    你的理解错的,不是只和第一行比较,而是2.txt里的内容和1.txt里的全部内容比较

有可能的情况是“aefafafa12312312” 在1.txt文本的 第79行

而“121212#aefafafa12312312”在2.txt文本的48行

如果是这样的情况,就将1.txt的内容替换为2.txt文本那行的内容
发表于 2012-5-3 05:18:22 | 显示全部楼层
回复 11# Rasm


    好吧,请解释一下5楼的说法,为什么那种情况不替换。
 楼主| 发表于 2012-5-3 06:45:16 | 显示全部楼层
本帖最后由 Rasm 于 2012-5-3 09:50 编辑

回复 12# gawk


    因为5楼的那种是不存在的

1111#net123123123
a123333#werqerqerqrq

他们只可以唯一对应一种,

a123333#net123123123    这种是永远不可能存在的

如果遇到5楼所说的,那可以替换掉。。
 楼主| 发表于 2012-5-3 16:17:39 | 显示全部楼层
回复 8# CrLf


    版主,你的批处理貌似不对啊
我拿个最直接,可观的例子说

1.txt的内容如下

b097e703c2266df140b176158db7b967
f2af3073d7fd0d1389431660a213da03
23aa1cf3836221787a710682a5d5508e
b5be656a7060dd3525027d6763c33ca0
421912aca048bceb6f78c378775205d0
7aecf141564a45c1aaa10e1309a71e6d
9aa0b8e9f776639f84f688cc4cd75ef2
0592843fee8cdfc2b03e6cd7be40126b

2.txt的内容内容如下

a#0cc175b9c0f1b6a831c399e269772661
000#c6f057b86584942e415435ffb1fa93d4
kwq#7aecf141564a45c1aaa10e1309a71e6d
006#568628e0d993b1973adc718237da6e93
777#f1c1592588411002af340cbaedd6fc33
hdf#9aa0b8e9f776639f84f688cc4cd75ef2
w07#4521058ddf92fa5b4795d756ec73117d

结果就是想把:

把1.txt的:7aecf141564a45c1aaa10e1309a71e6d替换为:kwq#7aecf141564a45c1aaa10e1309a71e6d
把1.txt的:9aa0b8e9f776639f84f688cc4cd75ef2替换为:hdf#9aa0b8e9f776639f84f688cc4cd75ef2

发表于 2012-5-3 17:28:27 | 显示全部楼层
回复 14# Rasm


    已经修改...md5 验证?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 01:04 , Processed in 0.017904 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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