标题: [已结]替换文本中的指定字符并保留空行
[打印本页]
作者: pusofalse
时间: 2008-4-27 19:25
标题: [已结]替换文本中的指定字符并保留空行
刚刚做了一下试验,发现set出现问题了
a.txt的内容
这是我的代码,就是想替换a.txt中的所有d为m,并且保留空行
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
我深知这代码输出的内容应该是:
但是我的却显示
Quote: |
1234
1234
d=m
msf
fm
m
a
d=m
asm |
|
T.T 哪里出毛病了啊?~ 高人指教! 以前也曾遇到过一回for截取字符串不正确的情况,重装系统之后好了,这回不会还要重装系统吧
原因看2楼和4楼~~
───────────────── 版务记录 ─────────────────
执行:HAT
操作:[2008-11-08]在帖子标题中增加搜索关键字
说明:原标题"[已结]不要犯同样的错误,关于set赋值"不利于论坛搜索
───────────────── 版务记录 ─────────────────
[
Last edited by HAT on 2008-11-9 at 00:10 ]
作者: lpk130
时间: 2008-4-27 19:40
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为空的时候出错
@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('findstr /n .* a.txt') do (
set str=%%a
set str=!str:*:=!
if defined str set str=!str:d=m!
echo.!str!
)
pause
作者: pusofalse
时间: 2008-4-27 19:46
Quote: |
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
... |
|
你的代码可是可以的,这样的话也能解决问题,但今天下午时我用我那个代码还是好好的,空行也保留着。。。不知为何~ 就用你这个吧~ 谢谢!
作者: pusofalse
时间: 2008-4-27 19:52
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!
作者: bat-zw
时间: 2008-4-27 21:47
标题: 建议尽量少使用findstr:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('type a.txt') do (
set str=%%i
set str=!str:d=m!
echo.!str!
)
pause>nul
作者: plp626
时间: 2008-4-27 22:16
楼上ZW兄有所不知:
Quote: |
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
作者: plp626
时间: 2008-4-27 22:19
Quote: |
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 ... |
|
空字符再替换将非空
作者: ZJHJ
时间: 2008-4-27 22:25
这个我也遇到了.也是求高手解决的,
if not "!var!"==""