[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决] 批处理怎样将一个文本里的指定字符串替换成另一个文本的内容

本帖最后由 pcl_test 于 2016-12-6 00:44 编辑

这个问题陈述起来略显复杂。

其实问题很简单,我有文本 a.txtb.txt

其中文本 a.txt 中包含一个唯一的关键词 #name# ,我想把文本 b.txt 的内容全部写入并替换掉#name# (非从文本最后一行写入,而是在#name#的原位置,把#name#替换成 b.txt 的内容),然后生成文本 c.txt


我的思路是对a.txt进行每行的读取并对比查找,当没有发现包含 #name# 的关键词时直接写入c.txt,而找到 #name# 后,直接替换成 b.txt 的内容并写入c.txt

要求代码简洁和高效

附件: 您需要登录才可以下载或查看附件。没有帐号?注册
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 CrLf 于 2013-7-28 02:52 编辑

这个真没有,cmd 处理不了这么大的,虽然可以用 for /f tokens 分解,但分解了也没法赋值和替换,你还是用 awk 或者 vbs 之类的吧,速度都很快:
  1. @gawk "BEGIN{getline<\"b.txt\";b=$0;getline"}{sub(\"#name#\",b);print}" a.txt>c.txt
复制代码
  1. Const key = "#name#"
  2. Set fso = WScript.CreateObject("Scripting.Filesystemobject")
  3. Set a = fso.OpenTextFile("a.txt",1)
  4. Set b = fso.OpenTextFile("b.txt",1)
  5. Set c = fso.CreateTextFile("c.txt",True)
  6. c.Write Replace(a.ReadAll,key,b.ReadAll)
复制代码
1

评分人数

TOP

看了半天没明白你的目的是什么,原来就是将a.txt中的某个关键字替换为b.txt的整个内容,却非要说得那么高深莫测。在怀疑别人的能力之前,请先弄清楚自己的需求能否让别人理解,这种简单道理跟你在公司上班时的一样,如果项目经理不能将需求明确化,下面的员工能地做好工作吗?

TOP

本帖最后由 pZjVa0 于 2013-7-27 23:49 编辑

回复 6# apang
    回复 7# CrLf
  1. for /f "delims=" %%i in ('findstr /n .* a.txt') do (
  2. set "str=%%i"
  3. setlocal enabledelayedexpansion
  4. set "str=!str:#name#=abc!"
  5. set "str=!str:*:=!"
  6. if /i "!str!" equ "0x#hex#" (
  7. >>结果.txt set/p=0x<nul
  8. >>结果.txt type b.txt
  9. echo;>>结果.txt
  10. ) else (
  11. >>结果.txt echo;!str!
  12. )
  13. endlocal
  14.     )
  15. del b.txt
复制代码
其实方法还是有的。
感谢Z-Y-J前辈。

我前面否认"没可能"这个说法是因为我看到前辈给我提供的思路,而我想把题目放出来让论坛大家一起讨论是希望能更多的参考大家的思路获得学习。

任何人相对于论坛来说,都是普通的一员,你我都不例外。所以,你,并不是什么香饽饽,别人不会抢着回答你的 ...
apang 发表于 2013-7-27 16:51
如果前面有什么言论让你觉得身份或者其他感觉不舒服那我这里跟你道歉吧,也许只是鉴于回复的较少让自己感觉比较着急。



大家看到帖子如果有思路就自然会回帖,2楼解释是正确的,你不愿相信也难怪他说气话。
不过楼主也别@了,@不 ...
CrLf 发表于 2013-7-27 18:21
轻易说没可能不像CrLf说的话,起码在您老发现引号分割之前大多数人也是认为没可能的。
呀,回帖时忽然有了个猜想,验证下竟然真的可以,看来可以推翻delims不能用"作为分隔符的观点了:
CrLf 发表于 2011-5-21 14:44



   

   

感谢论坛各位一直以来给予的帮助。

TOP

本帖最后由 CrLf 于 2013-7-27 18:24 编辑

大家看到帖子如果有思路就自然会回帖,2楼解释是正确的,你不愿相信也难怪他说气话。
不过楼主也别@了,@不是同一个帖子的回帖者是无效的,而且混论坛时间久的人水平多差不多,你看楼上的技术分就知道了,各人的差异只是处理特定情况的思路。
像顶楼这种超长行的情况楼主要求用纯批实现,等于是扬短避长,谁都搞不定,@Microsoft 也没法解决,除非不限制必须用纯批。

TOP

任何人相对于论坛来说,都是普通的一员,你我都不例外。所以,你,并不是什么香饽饽,别人不会抢着回答你的问题。有人回答你,你应该暗自庆幸上辈子积德了;没人回答也正常,也应该。
艾特这个,艾特那个,是不是你的问题除了论坛老大别人只好靠边站了?
这家伙,越想越恶心。
1

评分人数

    • CrLf: 表示理解,但这样有点不合适PB -2

TOP

这个问题很难解决吗?

TOP

本帖最后由 pZjVa0 于 2013-7-27 13:35 编辑

帖子要沉了..

TOP

本帖最后由 pZjVa0 于 2013-7-28 00:22 编辑

回复 2# apang


    不会的,这个用批处理可以做到

TOP

b.txt单行超长,纯批搞不定滴,除非。。。

TOP

返回列表