中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]求可以替换文本指定内容的批处理
作者:
标题: [求助]求可以替换文本指定内容的批处理 上一主题 | 下一主题
yxzpt
初级用户





积分 60
发帖 29
注册 2007-4-28
状态 离线
『楼 主』:  [求助]求可以替换文本指定内容的批处理

有a.txt和b.txt 2个文本

a.txt文本内容是每行一串数字,例:
170422
271458
270547
173707
195009
……

b.txt文本内容如下:
msgId=170422&satisficationStar=3&serviceQuality=50&professionLevel=50&responseLevel=50&servicePrice=50&preVisitTime=1&revist=1&evaluation=%E5%8F%91%E5%B8%83

在此求个批处理,每运行一次,将a.txt中的数字串逐行依次替换b.txt的红色部分,a.txt数列不用循环替换。谢谢!

[ Last edited by yxzpt on 2008-7-26 at 09:36 AM ]

2008-7-26 09:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  


@echo off
set "str1=msgId="
set "str3=^&satisficationStar=3^&serviceQuality=50^&professionLevel=50^&responseLevel=50^&servicePrice=50^&preVisitTime=1^&revist=1^&evaluation=%%E5%%8F%%91%%E5%%B8%%83"
if not exist c.txt (
  >"c.txt" echo 1
)
set /p mark=<c.txt
set cur=1
setlocal enabledelayedexpansion
for /f "usebackq delims=:" %%a in ("a.txt") do (
  set str2=%%a
  if "%str%" equ "" (
    >"c.txt" echo 1
  )
  if !cur! equ !mark! (
    goto :merge
  ) else (
    set /a cur+=1
  )
)
endlocal
goto :eof
:merge
>"d.txt" echo %str1%%str2%%str3%
set /a mark+=1
>"c.txt" echo %mark%
move /y d.txt b.txt




2008-7-26 10:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yxzpt
初级用户





积分 60
发帖 29
注册 2007-4-28
状态 离线
『第 3 楼』:  

谢谢楼上的,测试可以。但由于我的疏忽,没有说清楚,就是我在上面提到的b.txt

“msgId=170422&satisficationStar=3&serviceQuality=50&professionLevel=50&responseLevel=50&servicePrice=50&preVisitTime=1&revist=1&evaluation=%E5%8F%91%E5%B8%83”

只是b.txt内容其中的一部分,请问怎么修改才可以正常使用?

[ Last edited by yxzpt on 2008-7-26 at 10:41 AM ]

2008-7-26 10:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  

下次记得在顶楼把问题描述清楚^_^
b.txt的完整内容能贴出来看看吗?



2008-7-26 10:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yxzpt
初级用户





积分 60
发帖 29
注册 2007-4-28
状态 离线
『第 5 楼』:  

POST /AddEvaluation HTTP/1.1
Accept: text/javascript, text/html, application/xml, text/xml, */*
Accept-Language: zh-cn
x-prototype-version: 1.6.0
Referer: http://yhnrne.vicp.net/detail/212809.html?tag=hometop&cat=101
x-requested-with: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
Host: yhnrne.vicp.net
Content-Length: 270
Connection: Keep-Alive
Cache-Control: no-cache
Cache: infotree_DJGH370=749D03; JSESSIONID=FD2CF8E2A05B50D0CC8EE75D028A8204.AppSer2BTomcat

msgId=170422&satisficationStar=3&serviceQuality=50&professionLevel=50&responseLevel=50&servicePrice=50&preVisitTime=1&revist=1&evaluation=%E5%8F%91%E5%B8%83

2008-7-26 10:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 6 楼』:  


@echo off
set "str1=msgId="
set "str3=^&satisficationStar=3^&serviceQuality=50^&professionLevel=50^&responseLevel=50^&servicePrice=50^&preVisitTime=1^&revist=1^&evaluation=%%E5%%8F%%91%%E5%%B8%%83"
if not exist c.txt (
  >"c.txt" echo 1
)
set /p mark=<c.txt
set cur=1
setlocal enabledelayedexpansion
for /f "usebackq delims=:" %%a in ("a.txt") do (
  set str2=%%a
  if "%str%" equ "" (
    >"c.txt" echo 1
  )
  if !cur! equ !mark! (
    goto :merge
  ) else (
    set /a cur+=1
  )
)
endlocal
goto :eof
:merge
type nul>"d.txt"
for /f "tokens=1* delims=" %%a in ('findstr /v /i "msgId" "b.txt"') do (
  >>"d.txt" echo %%a
)
>>"d.txt" echo.
>>"d.txt" echo %str1%%str2%%str3%
set /a mark+=1
>"c.txt" echo %mark%
move /y d.txt b.txt
[ Last edited by HAT on 2008-7-26 at 11:02 AM ]



2008-7-26 11:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yxzpt
初级用户





积分 60
发帖 29
注册 2007-4-28
状态 离线
『第 7 楼』:  

谢谢你的帮助

2008-7-26 11:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: