中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 14:15
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎么样替换文本中的字符串 查看 1,834 回复 17
楼 主 怎么样替换文本中的字符串 发表于 2007-08-04 18:38 ·  中国 广东 梅州 电信
中级用户
★★
积分 262
发帖 129
注册 2007-07-11 06:50
19年会员
UID 93679
性别 男
状态 离线
比如说,

FreqUpMode=*

(*代表任意数字,可替换的数字)

我要寻找FreqUpMode,不管*的数字是什么,我要替换它为3。
2 发表于 2007-08-04 19:32 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
UE可以……
3 发表于 2007-08-04 20:21 ·  中国 广东 梅州 电信
中级用户
★★
积分 262
发帖 129
注册 2007-07-11 06:50
19年会员
UID 93679
性别 男
状态 离线
我要用BAT哦。批处理命令
4 发表于 2007-08-04 21:59 ·  中国 香港 腾讯云
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
19年会员
UID 75624
性别 男
状态 离线
P中似乎只有用sed外部命令才能替换,

纯P的话,只能导到新文件里。
5 发表于 2007-08-04 22:05 ·  中国 北京 利达宽带
中级用户
★★
积分 273
发帖 91
注册 2007-05-07 18:12
19年会员
UID 87770
性别 男
状态 离线
这个代码可以实现楼主的要求,不过有两个缺陷
1 会去掉文件中的空行
2 只能判断关键字是否符合要求,而不能检查是否有等号

setlocal enabledelayedexpansion

set input=test.txt
set output=test1.txt

set /a c1=0
set /a c2=0
for /f "tokens=1,2* delims==" %%i in ('type %input%') do (
set /a c1 = !c1!+1
if "%%i"=="FreqUpMode" (
echo FreqUpMode=23 >> %output%
) else (
set /a c2=0
for /f "delims=" %%a in ('type %input%') do (
set /a c2=!c2!+1
if "!c1!"=="!c2!" echo %%a >> %output%
)
)
)
pause


输入
FreqUpMode=12122121
asdfadf

FreqUpMode=
FreqUpMode
FreqUpModes=12122121


输出
FreqUpMode=23 
asdfadf
FreqUpMode=23
FreqUpMode=23
FreqUpModes=12122121


[ Last edited by sonicandy on 2007-8-5 at 07:12 AM ]
6 发表于 2007-08-05 07:48 ·  中国 广东 梅州 电信
中级用户
★★
积分 262
发帖 129
注册 2007-07-11 06:50
19年会员
UID 93679
性别 男
状态 离线
楼上的真比熊猫还讨人喜爱。谢谢。
你所说的两个缺点倒没有什么所谓,不影响ini的使用,可是我发现的缺点就是,速度比较慢了一点。
7 发表于 2007-08-05 08:03 ·  中国 广东 梅州 电信
中级用户
★★
积分 262
发帖 129
注册 2007-07-11 06:50
19年会员
UID 93679
性别 男
状态 离线
仔细弄了弄发现,如果输入输出同一个文件的话,那只能把新修改的内容增加到原来的文件上。这样就出现两份内容,一份修改前的,一份是修改后的,这样就没有达到替换字符串的要求。
8 发表于 2007-08-05 10:35 ·  中国 北京 利达宽带
中级用户
★★
积分 273
发帖 91
注册 2007-05-07 18:12
19年会员
UID 87770
性别 男
状态 离线
不客气,这样应该就可以了.

setlocal enabledelayedexpansion

set input=test.txt
set output=test~tmp.txt

set /a c1=0
set /a c2=0
for /f "tokens=1,2* delims==" %%i in ('type %input%') do (
set /a c1 = !c1!+1
if "%%i"=="FreqUpMode" (
echo FreqUpMode=23 >> %output%
) else (
set /a c2=0
for /f "delims=" %%a in ('type %input%') do (
set /a c2=!c2!+1
if "!c1!"=="!c2!" echo %%a >> %output%
)
)
)
del %input%
ren %output% %input%
pause
9 发表于 2007-08-05 10:57 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
早说是ini格式的文件……

FreqUpMode=48asdfadf
FreqUpMode=99;FreqUpMode=81
FreqUpModes=12122121test这种P是很难做到的
10 发表于 2007-08-05 15:23 ·  中国 广东 梅州 电信
中级用户
★★
积分 262
发帖 129
注册 2007-07-11 06:50
19年会员
UID 93679
性别 男
状态 离线
回9楼

不瞒你,8楼已经做到了。
11 发表于 2007-08-14 12:15 ·  中国 广东 湛江 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
Originally posted by kidzgy at 2007-8-5 15:23:
回9楼

不瞒你,8楼已经做到了。



早说是ini格式的文件……
FreqUpMode=23
FreqUpMode=23
FreqUpModes=12122121test这种P是很难做到的


这个是运行后的结果?做到了?
12 发表于 2007-08-14 16:36 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
我来个简单点的:
set input=test.txt
set output=tmp.txt
for /f "tokens=1,2* delims==" %%i in ('type %input%') do if "%%i"=="FreqUpMode" (echo FreqUpMode=23>>%output%
) else echo %%i=%%j>>%output%
del %input%
ren %output% %input%
pause

当然可以不要临时文件也是可以的,不过文件大的话内存占用比较大,而且也不知道CMD里最多可以有多少变量
13 发表于 2007-08-14 16:57 ·  中国 北京 联通
中级用户
★★
替身
积分 269
发帖 130
注册 2007-03-23 21:41
19年会员
UID 82683
性别 女
状态 离线
你们都够牛X的,不过可以告诉你们,你们的FOR语句都会忽略以;分号开头的行,在我看来还是不完美
14 发表于 2007-08-14 18:21 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
下面的是忽略以:分号开头的行,以;分号开头的行可以正常输出.没有办法,FOR总会忽略某些行.
set input=test.txt
set output=tmp.txt
for /f "eol=: tokens=1,2* delims==" %%i in ('type %input%') do if "%%i"=="FreqUpMode" (echo FreqUpMode=23>>%output%
) else echo %%i=%%j>>%output%
del %input%
ren %output% %input%
pause
15 发表于 2007-08-14 18:42 ·  中国 中电华通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
19年会员
UID 68504
性别 男
来自 湖南==》广东
状态 离线
是不是可以指定一个非常难得一见的字符作为eol的关键字符呢?
如:☉、∈等等,文件中第一个字符是这种情况的应该不多吧?
论坛跳转: