中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-02 17:55
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]延时环境变量不起作用 查看 973 回复 11
楼 主 [求助]延时环境变量不起作用 发表于 2006-12-11 22:15 ·  中国 湖北 武汉 电信
中级用户
★★
积分 245
发帖 103
注册 2006-06-30 00:00
20年会员
UID 57801
性别 男
状态 离线
请教……
偶有一个替换指定文本文件1.txt内容中所有123为789的批处理文件,里面用到了版主大大说的延时环境变量,但是这个批处理在XP和2000中运行均不起作用[同目录下的这个1.txt没有任何变化],而有的朋友说在他机子上可以,请问是什么问题?
代码如下:
echo
setlocal enabledelayedexpansion
for /f "delims=" %%i in (1.txt) do (
set a=%%i
set a=!a:123=789!
echo !a!
)
pause
exit
2 发表于 2006-12-11 22:21 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
你的批处理只是在cmd窗口显示出内容,并不是替换1.txt中的内容
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
3 发表于 2006-12-11 22:23 ·  中国 江苏 苏州 联通
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
19年会员
UID 60484
状态 离线
你没写对 1.txt 修改的语句,所以它没有任何变化。
把 echo !a! 改成 echo !a!>>2.txt
这样 2.txt 应该就是你所要的文件。
4 发表于 2006-12-11 22:24 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
http://www.cn-dos.net/forum/viewthread.php?tid=25506&fpage=2

这其中的内容符合你的要求。
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
5 发表于 2006-12-12 00:57 ·  中国 湖北 武汉 电信
中级用户
★★
积分 245
发帖 103
注册 2006-06-30 00:00
20年会员
UID 57801
性别 男
状态 离线
Originally posted by NaturalJ0 at 2006-12-11 22:23:
你没写对 1.txt 修改的语句,所以它没有任何变化。
把 echo !a! 改成 echo !a!>>2.txt
这样 2.txt 应该就是你所要的文件。


改了之后只是生成了和1.txt内容一样的2.txt,没有任何变化。
6 发表于 2006-12-12 01:03 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (1.txt) do (
set a=%%i
set a=!a:123=789!
echo !a! >> 2.txt
)
notepad 2.txt


(假定1.txt文件中只有普通字母和数字)

我测试上面这个代码没有问题啊~:)
可以更改,楼主再试一下~:)
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
7 发表于 2006-12-12 01:50 ·  中国 湖北 武汉 电信
中级用户
★★
积分 245
发帖 103
注册 2006-06-30 00:00
20年会员
UID 57801
性别 男
状态 离线
狂晕……用了你的代码,再用其它的代码又可以了……
8 发表于 2006-12-12 01:51 ·  中国 湖北 武汉 电信
中级用户
★★
积分 245
发帖 103
注册 2006-06-30 00:00
20年会员
UID 57801
性别 男
状态 离线
非常感谢6楼的和以上各位大大……
但是为什么用了3742668版主的代码无论如何也不行?
@echo off

echo 去掉引号:
call :replace 1.txt "

echo.
echo 替换字符:
call :replace 1.txt "123" "789"

pause>nul
goto :eof

:replace
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1* delims=" %%i in (%1) do set var=%%i & echo !var:%2=%3!
endlocal
goto :eof

[ Last edited by flying008 on 2006-12-12 at 02:02 AM ]
9 发表于 2006-12-12 02:09 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
你试试去掉引号
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
10 发表于 2006-12-12 02:09 ·  中国 湖北 武汉 电信
中级用户
★★
积分 245
发帖 103
注册 2006-06-30 00:00
20年会员
UID 57801
性别 男
状态 离线
3742668版主的代码可以了,偶终于明白了是自己多了引号惹的祸,谢谢……

[ Last edited by flying008 on 2006-12-12 at 02:11 AM ]
11 发表于 2006-12-12 05:22 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
用了你的代码,再用其它的代码又可以了……

  汗一个先。

  难道这世界真的有鬼? =_=!!
12 发表于 2006-12-12 22:00 ·  中国 湖北 武汉 电信
中级用户
★★
积分 245
发帖 103
注册 2006-06-30 00:00
20年会员
UID 57801
性别 男
状态 离线
这个也要谢谢LXMXN了,一样的代码他也曾写过偶,不知什么原因,开始不起作用,后来又可以了……
论坛跳转: