中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-07 15:53
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]奇怪了,关于替换文本内容的问题 查看 770 回复 4
楼 主 [已结]奇怪了,关于替换文本内容的问题 发表于 2007-04-25 00:14 ·  中国 上海 浦东新区 电信
中级用户
★★
积分 302
发帖 138
注册 2007-03-29 02:33
19年会员
UID 83224
性别 男
状态 离线
for /f "tokens=* delims=" %%i in (1.txt) do set n=!%i:ab=12!&&echo !n!>>2.txt
将1.txt中有"ab"的字符替换为"12"然后输出到2.txt中,执行不成功,没搞明白.
昨天这个问题还弄成了,今天大清早过来又冒出来了,奇怪了

[ Last edited by bjsh on 2007-4-24 at 03:22 PM ]
2 发表于 2007-04-25 00:53 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
To lililulula:

导致你上面的脚本没有成功的主要原因是没有启用变量延迟。

下面的这个脚本基本可以处理你的问题,但是对于特殊符号的处理可能仍然存在一些问题,而且大写的"AB"也会转化成"12".

@Echo off&Setlocal EnableDelayedExpansion
copy /y nul 2.txt >NUL
for /f "delims=: tokens=1*" %%a in ('findstr/n .* "a.txt"') do (
if NOT "%%b"=="" (set "str=%%b"
set str=!str:ab=12!
echo.!str!>>2.txt) else (echo.>>2.txt)
)
START 2.TXT
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
lililulula +1 2007-04-25 04:10
3 发表于 2007-04-25 03:40 ·  中国 浙江 杭州 电信
银牌会员
★★★
积分 2,000
发帖 621
注册 2007-01-01 00:00
19年会员
UID 75212
性别 男
状态 离线

for /f "tokens=* delims=" %%i in (1.txt) do set n=!%i:ab=12!&&echo !n!>>2.txt


我想这一句set n=!%i:ab=12!你是想写成set n=!%%i:ab=12!的吧;

但是即便这样也是不对的;

首先 使用!!启用变量延迟需要在开头加setlocal enabledelayedexpansion

其次 利用set来替换变量; 其中的set n=!_:ab=12! 标记_处应该为 已定义的环境变量; 而不能用%%i等变量.
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
lililulula +1 2007-04-25 04:07
4 发表于 2007-04-25 03:53 ·  中国 北京 联通
中级用户
★★
替身
积分 269
发帖 130
注册 2007-03-23 21:41
19年会员
UID 82683
性别 女
状态 离线

@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (1.txt) do set "n=%%i"&&set n=!n:ab=12!&&echo !n!>>2.txt
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
lililulula +1 2007-04-25 04:11
5 发表于 2007-04-25 03:55 ·  中国 上海 浦东新区 电信
中级用户
★★
积分 302
发帖 138
注册 2007-03-29 02:33
19年会员
UID 83224
性别 男
状态 离线
多谢几位的帮助,特别是bjsh斑竹,昨天估计也是我没理解的情况下测试成功的,现已经搞明白了.

[ Last edited by lililulula on 2007-4-24 at 03:10 PM ]
论坛跳转: