中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-07 15:08
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 文本替换问题:把所有在偶数位置的a换成b 查看 1,297 回复 8
楼 主 文本替换问题:把所有在偶数位置的a换成b 发表于 2008-04-24 16:53 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
a.txt
aaaaaaaaaaaaa

输出为
ababababababab

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

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


[ Last edited by HAT on 2008-10-20 at 09:58 ]
2 发表于 2008-04-24 16:58 ·  中国 江苏 苏州 移动
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线

@echo off
set str=aaaaaaaaaaaaa
set str=%str:aa=ab%
echo %str%
pause
3 发表于 2008-04-24 17:07 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
Originally posted by huahua0919 at 2008-4-24 04:58 PM:

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

谢谢。。
原来就这么简单~ 想了很长时间的问题,看来是我想的太复杂了~
4 发表于 2008-04-24 17:19 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
如偶数位不是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 ]
简单!简单!再简单!
5 发表于 2008-04-24 20:54 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
那你给的测试数据有问题……
6 也来一个: 发表于 2008-04-24 23:28 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
文本输出问题,我最喜欢,也来凑个热闹了(考虑通用性哈):
@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
7 发表于 2008-04-24 23:51 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
晕,上面还是没考虑到字符总数是奇数时会多一个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
8 发表于 2008-04-25 00:53 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
通用加效率

@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
致精致简!
9 发表于 2008-04-25 01:10 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
考虑奇数行
:

@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
致精致简!
论坛跳转: