Board logo

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

作者: studybat2    时间: 2011-10-29 19:12     标题: [已解决]批处理如何逐行替换文档内的特殊字符为指定文档内的所在行字符和随机数?

目前我要替换的一个文档:a.txt 里面的内容如下:
我爱你_我爱你_我爱你
你我爱_你爱我_你我爱
她爱你_我爱你_她爱你
  。。。。
具体行数省略!

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

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

  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
复制代码

作者: studybat2    时间: 2011-10-29 20:00

回复 2# lvsehuaxue


    谢谢,我试试先!
作者: studybat2    时间: 2011-10-29 20:12

回复 2# lvsehuaxue


    经过测试,批处理必须保证A.TXT必须和B.TXT行数保持一致,如果不一致,比如B.TXT有8行,A.TXT有10行,运行后,只替换了A.TXT中的前8行内容,最后两行的_被删除然后输出!
  请教如何修改,如果B.TXT的行数小于或大于A.TXT时,自动循环B.TXT中的内容来替换A.TXT中的不足行,当然随机替换也可以!
作者: 545810831    时间: 2011-10-29 20:27

  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
复制代码

作者: CrLf    时间: 2011-10-29 20:43

  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
复制代码

作者: studybat2    时间: 2011-10-29 21:12

回复 5# 545810831


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


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

请问第一种改如何修改第一种达到,循环使用B.TXT的替换A.TXT中行数不足的行数?先谢谢了
作者: studybat2    时间: 2011-10-29 21:16

回复 6# CrLf


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

结果为空,什么原因呢?
作者: 545810831    时间: 2011-10-30 08:03

  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
复制代码

作者: lvsehuaxue    时间: 2011-10-30 12: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
复制代码

作者: studybat2    时间: 2011-10-30 13:12

回复 10# lvsehuaxue


    测试成功!谢谢了
作者: studybat2    时间: 2011-10-30 13:13

回复 9# 545810831


    测试成功了!谢谢
作者: 墨客的秋天    时间: 2016-10-19 00:19

学习一下




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