中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 文本替换问题:把所有在偶数位置的a换成b
作者:
标题: 文本替换问题:把所有在偶数位置的a换成b 上一主题 | 下一主题
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『楼 主』:  文本替换问题:把所有在偶数位置的a换成b

a.txt
aaaaaaaaaaaaa

输出为
ababababababab

即 把所有在偶数位置的a换成b~

───────────────── 版务记录 ─────────────────
执行:HAT
操作:[2008-10-20]在帖子标题中增加搜索关键字
说明:原标题"文本替换问题"不利于论坛搜索
───────────────── 版务记录 ─────────────────


[ Last edited by HAT on 2008-10-20 at 09:58 ]

2008-4-24 16:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 2 楼』:  


@echo off
set str=aaaaaaaaaaaaa
set str=%str:aa=ab%
echo %str%
pause


2008-4-24 16:58
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by huahua0919 at 2008-4-24 04:58 PM:
@echo off
set str=aaaaaaaaaaaaa
set str=%str:aa=ab%
echo %str%
pause

谢谢。。
原来就这么简单~ 想了很长时间的问题,看来是我想的太复杂了~

2008-4-24 17:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 4 楼』:  

如偶数位不是a 就替换不了啊
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
set "str=%%i"
call :lp
)
pause
goto :eof
:lp
set str1=!str:~%n%,1!
if defined str1 set/a n+=2&set str2=!str2!!str1!b&goto lp
set n=&echo !str2!
set str2=

[ Last edited by terse on 2008-4-24 at 05:21 PM ]



简单!简单!再简单!
2008-4-24 17:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 5 楼』:  

那你给的测试数据有问题……

2008-4-24 20:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 6 楼』:  也来一个:

文本输出问题,我最喜欢,也来凑个热闹了(考虑通用性哈):
@echo off&setlocal enabledelayedexpansion
set n=-2
:begin
set /a n+=2
for /f "delims=" %%i in (a.txt) do (
    set a=%%i&set a=!a:~%n%!
    if not "!a!"=="" (
       set str=!a:~,1!
       set var=!var!!str!b
       goto begin
    )
    echo !var!
)
pause>nul&goto :eof
[ Last edited by zw19750516 on 2008-4-24 at 11:31 PM ]



批处理之家新域名:www.bathome.net
2008-4-24 23:28
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 7 楼』:  

晕,上面还是没考虑到字符总数是奇数时会多一个b的情况,修改如下:
echo off&setlocal enabledelayedexpansion
set n=-2&set b=b
:begin
set /a n+=2
for /f "delims=" %%i in (a.txt) do (
    set a=%%i&set a=!a:~%n%!
    if "!a:~1!"=="" set "b="
    if not "!a!"=="" (
       set str=!a:~,1!
       set var=!var!!str!!b!
       goto begin
    )
    echo !var!
)
pause>nul&goto :eof




批处理之家新域名:www.bathome.net
2008-4-24 23:51
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 8 楼』:  

通用加效率
@echo off
for /f "delims=" %%a in (a.txt) do (
  set str=%%a&set "num="
  call :loop
)
pause
:loop
set num=%num%%str:~0,1%b
set str=%str:~2%
if not defined str echo %num%&goto :eof
goto loop




致精致简!
2008-4-25 00:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 9 楼』:  

考虑奇数行
:
@echo off
for /f "delims=" %%a in (a.txt) do (
  set str=%%a&set "num="
  call :loop
)
pause
:loop
if not "%str:~1,1%"=="" (set num=%num%%str:~0,1%b) else set num=%num%%str%
set str=%str:~2%
if not defined str (echo %num%&goto :eof)
goto loop




致精致简!
2008-4-25 01:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: