中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-20 18:42
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 用for循环进行文本替换,某些特殊字符无法替换。求助! 查看 3,792 回复 11
楼 主 用for循环进行文本替换,某些特殊字符无法替换。求助! 发表于 2006-07-13 20:50 ·  中国 上海 联通
新手上路
积分 6
发帖 1
注册 2006-07-13 20:21
19年会员
UID 58532
性别 女
状态 离线
在批处理文件中,将文件a.txt 中的某些文字替换成别的文字
for /f "tokens=* delims= " %%i in (a.txt) do (
set n=%%i
set n=!n:aaa=bbb!
echo !n! | find /I "ECHO"
IF ERRORLEVEL 1 (
echo !n! >> temp.txt
) else (
echo. >>temp.txt
)
)
copy temp.txt a.txt

如果字串aaa中含有空格,或者点号.都不能中正确替换,有哪位大侠有更好的解决方案? 谢谢谢谢谢。。。。
2 发表于 2006-07-15 00:31 ·  中国 江苏 苏州 电信
初级用户
★★
积分 160
发帖 75
注册 2006-06-28 01:07
19年会员
UID 57661
性别 男
状态 离线
set n=!n:aaa=bbb!

同是新手上路 似乎你比我要厉害哦
呵呵 不介意的话 点解一下这句先

谢谢啊^_^
3 发表于 2006-07-16 20:36 ·  中国 福建 泉州 石狮市
银牌会员
★★★
积分 1,276
发帖 469
注册 2002-12-23 13:00
23年会员
UID 586
性别 男
来自 福建泉州
状态 离线
按照楼主要求,基本上是无法达到.
只好再加几句替换的命令了.将所有可能的组合全部加进来.
不知这个作什么用,最终的目的是什么?若能再详细一点(最好贴上你的原文件),或许有办法.

TO 2楼的:
set n=!n:aaa=bbb!
将变量n中的aaa替换成bbb
QQ:366840202
http://chenall.net
4 发表于 2006-07-20 01:28 ·  中国 山西 运城 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
23年会员
UID 19
性别 男
状态 离线
Re diane:

set 的串替换是支持 句点和空格 的,请测试以下的示例,正常情况下,它应该显示出的我的英文name。你的问题应该与 a.txt 中的其他内容有关。

另外,echo !n! 至以下数句,可使用一句 echo.!n! >> temp.txt 等同替换。


@echo off & setlocal EnableDelayedExpansion
for /f "tokens=* delims=" %%i in ("Hello world.") do (
set n=%%i
set n=!n:ld.=t!
set n=!n:o w= S!
set n=!n:He=Wi!
echo !n!
)
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
5 发表于 2006-07-21 20:18 ·  中国 江苏 苏州 电信
初级用户
★★
积分 160
发帖 75
注册 2006-06-28 01:07
19年会员
UID 57661
性别 男
状态 离线
呵呵 谢谢chenall的解释
不过似乎 willsort大哥的来得更清楚明白一些

一直很敬佩的哦
6 发表于 2007-01-16 03:00 ·  中国 江苏 连云港 电信
高级用户
★★★
前进者
积分 641
发帖 303
注册 2007-01-10 02:57
19年会员
UID 76009
性别 男
状态 离线
晕死了,看不太懂啊。!n!是啥啊?
我相信总有一天,总会遇到一个人可以相濡以沫、相吻以湿!
7 发表于 2007-04-21 03:45 ·  中国 广东 中山 电信
初级用户
★★
积分 127
发帖 62
注册 2007-04-19 12:43
19年会员
UID 85744
性别 男
状态 离线
学到东西,多谢willsort
8 发表于 2007-04-24 04:26 ·  中国 香港
新手上路
积分 4
发帖 2
注册 2007-04-20 04:04
19年会员
UID 85797
性别 男
状态 离线
为什么
echo.!n! >> temp.txt
一句可以可以判定echo并删除之呢?
9 发表于 2007-04-24 04:27 ·  中国 香港
新手上路
积分 4
发帖 2
注册 2007-04-20 04:04
19年会员
UID 85797
性别 男
状态 离线
为什么echo.!n! >> temp.txt
可以判定echo非法字符并删除之呢?

并且结果里原来是空格的现在没了,怎么保留空格呢?
并且“!”也无法保留下来,怎么办呢?

[ Last edited by xielei198210 on 2007-4-23 at 03:34 PM ]
10 发表于 2007-04-25 02:17 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
p处理特殊字符还是很麻烦的
11 for /F /L 带此循环 发表于 2010-12-01 23:15 ·  中国 广东 佛山 电信
初级用户
积分 59
发帖 28
注册 2010-11-05 01:45
15年会员
UID 177110
性别 男
状态 离线
『楼 主』: 用for循环进行文本替换,某些特殊字符无法替换。求助!

在批处理文件中,将文件a.txt 中的某些文字替换成别的文字
for /f "tokens=* delims= " %%i in (a.txt) do (
set n=%%i
set n=!n:aaa=bbb!
echo !n! | find /I "ECHO"
IF ERRORLEVEL 1 (
echo !n! >> temp.txt
) else (
echo. >>temp.txt
)
)
copy temp.txt a.txt

如果字串aaa中含有空格,或者点号.都不能中正确替换,有哪位大侠有更好的解决方案? 谢谢谢谢谢
TO 2楼的:
set n=!n:aaa=bbb!
将变量n中的aaa替换成bbb


@echo off & setlocal EnableDelayedExpansion
for /f "tokens=* delims=" %%i in ("Hello world.") do (
set n=%%i
set n=!n:ld.=t!
set n=!n:o w= S!
set n=!n:He=Wi!
echo !n!
)
12 这样的 需dos命令扩展支持的代码的运行环境条件是什么 发表于 2010-12-01 23:21 ·  中国 广东 佛山 电信
初级用户
积分 59
发帖 28
注册 2010-11-05 01:45
15年会员
UID 177110
性别 男
状态 离线
请教前背: 这样的 setlocal EnableDelayedExpansion 需dos命令扩展支持的代码,dos7.1这样的非windows环境运行码!
论坛跳转: