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

[文件操作] [已解决]批处理如何逐行替换文档内的特殊字符为指定文档内的所在行字符和随机数?

[复制链接]
发表于 2011-10-29 19:12:44 | 显示全部楼层 |阅读模式
目前我要替换的一个文档:a.txt 里面的内容如下:
我爱你_我爱你_我爱你
你我爱_你爱我_你我爱
她爱你_我爱你_她爱你
  。。。。
具体行数省略!

我要准备替换文档:b.txt 格式为每行一个字词:
你好
我好
大家好
。。。。
具体行数省略!

这个_最好可以自定义,因为我要处理的文本随时会变化的!
请问怎么调用B.TXT的每一行逐行来替换A.TXT的每一行中的"_"的内容,
也求另外一种写法把A.txt中的_替换为随机数字或字母组合,并且每行都不同。

评分

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

查看全部评分

发表于 2011-10-29 19:57:51 | 显示全部楼层

  1. @Echo Off&Setlocal Enabledelayedexpansion
  2. for /f "delims=" %%i in (b.txt) do (
  3.    set /a n+=1
  4.    set .!n!=%%i
  5. )
  6. for /f "delims=" %%i in (a.txt) do (
  7.    set /a m+=1
  8.    set "str=%%i"
  9.    call call set "str=%%%%str:_=%%.!m!%%%%%%"
  10.    echo !str!
  11. )
  12. pause
复制代码
 楼主| 发表于 2011-10-29 20:00:14 | 显示全部楼层
回复 2# lvsehuaxue


    谢谢,我试试先!
 楼主| 发表于 2011-10-29 20:12:28 | 显示全部楼层
回复 2# lvsehuaxue


    经过测试,批处理必须保证A.TXT必须和B.TXT行数保持一致,如果不一致,比如B.TXT有8行,A.TXT有10行,运行后,只替换了A.TXT中的前8行内容,最后两行的_被删除然后输出!
  请教如何修改,如果B.TXT的行数小于或大于A.TXT时,自动循环B.TXT中的内容来替换A.TXT中的不足行,当然随机替换也可以!
发表于 2011-10-29 20:27:41 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do  set /a m+=1&set a!m!=%%i
  3. for /f "delims=" %%i in (b.txt) do  set /a n+=1&set b!n!=%%i
  4. :sta
  5. cls
  6. set /a num+=1
  7. for /L %%i in (1 1 !m!) do (
  8. set /a ran=!random!
  9. set str=!a%%i!
  10. set str1=!a%%i!
  11. for /f %%a in ("!b%%i!") do set str=!str:_=%%a!
  12. if !num! equ 1 echo !str!  
  13. for /f %%b in ("!ran!") do set str1=!str1:_=%%b!
  14. if !num! gtr 2 echo !str1!
  15. )
  16. set /a ran=%ran%%%10
  17. color f!ran!
  18. pause
  19. if !num! lss 100 goto sta
复制代码
发表于 2011-10-29 20:43:44 | 显示全部楼层
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3.     set str=%%a
  4.     setlocal enabledelayedexpansion
  5.     set /p var=
  6.     for /f "delims=" %%b in (""!var!"") do set str=!str:_=%%~b!
  7.     endlocal
  8. )<b.txt>c.txt
复制代码
 楼主| 发表于 2011-10-29 21:12:50 | 显示全部楼层
回复 5# 545810831


不好意思,由于网速太给力了,点回复提交,折腾了半小时。终于打开页面了


经过测试:B.TXT为48行,A.TXT内容为84行,
第一替换:用B.TXT替换A.TXT的内容,只替换了48行,其余行数为做替换,正常输出!
第二替换:随机数替换A.TXT中带_的内容,替换了A.TXT中的84行,每行数字都不一样,测试成功!

请问第一种改如何修改第一种达到,循环使用B.TXT的替换A.TXT中行数不足的行数?先谢谢了
 楼主| 发表于 2011-10-29 21:16:09 | 显示全部楼层
回复 6# CrLf


    经过测试:B.TXT为48行,A.TXT内容为84行

结果为空,什么原因呢?
发表于 2011-10-30 08:03:51 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do  set /a m+=1&set a!m!=%%i
  3. :sta
  4. for /f "delims=" %%i in (b.txt) do  (
  5. set /a n+=1
  6. set b!n!=%%i
  7. set b!u!=%%i
  8. )
  9. cls
  10. set /a num+=1
  11. for /L %%i in (1 1 !m!) do (
  12. set /a ran=!random!
  13. set str=!a%%i!
  14. set str1=!a%%i!
  15. for /f %%a in ("!b%%i!") do set str=!str:_=%%a!
  16. if !num! equ 2 echo !str!  
  17. for /f %%b in ("!ran!") do set str1=!str1:_=%%b!
  18. if !num! equ 3  echo !str1!
  19. )
  20. pause
  21. if !num! lss 3 goto sta
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2011-10-30 12:01:01 | 显示全部楼层

  1. @Echo Off&Setlocal Enabledelayedexpansion
  2. for /f "delims=" %%i in (b.txt) do (
  3.    set /a n+=1
  4.    set .!n!=%%i
  5. )
  6. for /f "delims=" %%i in (a.txt) do (
  7.    set /a m+=1
  8.    set "str=%%i"
  9.    call call set "str=%%%%str:_=%%.!m!%%%%%%"
  10.    if "!m!" equ "!n!" set m=
  11.    echo !str!
  12. )
  13. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-10-30 13:12:00 | 显示全部楼层
回复 10# lvsehuaxue


    测试成功!谢谢了
 楼主| 发表于 2011-10-30 13:13:06 | 显示全部楼层
回复 9# 545810831


    测试成功了!谢谢
发表于 2016-10-19 00:19:11 | 显示全部楼层
学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:31 , Processed in 0.022983 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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