中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-08 08:51
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » [已结]替换文本中的指定字符并保留空行
可打印版本  890 / 7
第1楼 pusofalse 发表于 2008-04-27 19:25
银牌会员 发帖 646 积分 1,604
[已结]替换文本中的指定字符并保留空行
刚刚做了一下试验,发现set出现问题了

a.txt的内容
1234
1234

dsf
fd
d
a

asd


这是我的代码,就是想替换a.txt中的所有d为m,并且保留空行


我深知这代码输出的内容应该是:
1234
1234

msf
fm
m
a

asm


但是我的却显示
1234
1234
d=m
msf
fm
m
a
d=m
asm



T.T 哪里出毛病了啊?~ 高人指教! 以前也曾遇到过一回for截取字符串不正确的情况,重装系统之后好了,这回不会还要重装系统吧

原因看2楼和4楼~~

───────────────── 版务记录 ─────────────────
执行:HAT
操作:在帖子标题中增加搜索关键字
说明:原标题"不要犯同样的错误,关于set赋值"不利于论坛搜索
───────────────── 版务记录 ─────────────────


[ Last edited by HAT on 2008-11-9 at 00:10 ]
第2楼 lpk130 发表于 2008-04-27 19:40
初级用户 发帖 30 积分 80
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('findstr /n .* a.txt') do (
set str=%%a
set str=!str:*:=!
set str=!str:d=m!
echo.!str!
)
pause

红色那句,当str为空的时候出错
第3楼 pusofalse 发表于 2008-04-27 19:46
银牌会员 发帖 646 积分 1,604
Originally posted by lpk130 at 2008-4-27 07:40 PM:
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('findstr /n .* a.txt') do (
set str=%%a
set str=!str:*:=!
set str=!str:d=m!
echo.!str!
)
pause
...

你的代码可是可以的,这样的话也能解决问题,但今天下午时我用我那个代码还是好好的,空行也保留着。。。不知为何~ 就用你这个吧~ 谢谢!
第4楼 pusofalse 发表于 2008-04-27 19:52
银牌会员 发帖 646 积分 1,604
OK 我明白原因了,
在被替换之前,str的值始终不能为空,空的话就会出现我那种情况了,如果在替换之后再把:及其前的所有字符删除掉的话,就可以了~
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('findstr /n .* a.txt') do (
set str=%%a
set str=!str:d=m!
set str=!str:*:=!
echo.!str!
)
pause
就像这样~~ 感谢lpk130!
第5楼 bat-zw 发表于 2008-04-27 21:47
金牌会员 发帖 1,276 积分 3,105
建议尽量少使用findstr:
第6楼 plp626 发表于 2008-04-27 22:16
银牌会员 发帖 1,020 积分 2,278
楼上ZW兄有所不知:
for /f ('more') echo >nul 2806.7
for /f ('type') echo >nul 3932.1
for /f ('findstr .*') echo >nul 4007.6
for /f ('find /v ""') echo >nul 2966.5
for /f ( 文件) echo >nul 9807.5


for 集合里 type 比findstr .*还稍慢呢,最快的当属直接用文件速度是其他的2倍
请看此贴:

http://www.cn-dos.net/forum/viewthread.php?tid=39841&fpage=2
第7楼 plp626 发表于 2008-04-27 22:19
银牌会员 发帖 1,020 积分 2,278
Originally posted by pusofalse at 2008-4-27 07:25 PM:
刚刚做了一下试验,发现set出现问题了

a.txt的内容
1234
1234

dsf
fd
d
a

asd

这是我的代码,就是想替换a.txt中的所有d为m,并且保留空行
setlocal ...

空字符再替换将非空
第8楼 ZJHJ 发表于 2008-04-27 22:25
高级用户 发帖 374 积分 609
这个我也遇到了.也是求高手解决的,

if not "!var!"==""
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023