中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-16 16:41
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助] 98 FOR 的 DO 后面要接一条以上的语句应该怎么办 查看 1,035 回复 9
楼 主 [求助] 98 FOR 的 DO 后面要接一条以上的语句应该怎么办 发表于 2006-08-15 19:11 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
UID 60484
状态 离线
运行环境是98最简启动盘(三文件)加了一个 98 的 FIND.EXE 文件

c:\num.txt 内容为
num=2

1.bat 内容为
@echo off
FOR %%i in (1,2,3) do find "num=%%i" c:\num.txt>nul & if errorlevel 0 if not errorlevel 1 set num=%%i
echo num=%num%

运行结果是
C:\>1
File not found - &File not found - ifFile not found - errorlevelFile not found
0File not found - ifFile not found - notFile not found - errorlevelFile not fo
nd - 1File not found - setInvalid keyword
File not found - &File not found - ifFile not found - errorlevelFile not found
0File not found - ifFile not found - notFile not found - errorlevelFile not fo
nd - 1File not found - setInvalid keyword
File not found - &File not found - ifFile not found - errorlevelFile not found
0File not found - ifFile not found - notFile not found - errorlevelFile not fo
nd - 1File not found - setInvalid keyword
num=
C:\>_


3.bat 内容为
@echo off
find "num=1" c:\num.txt>nul
if errorlevel 0 if not errorlevel 1 set num=1
find "num=2" c:\num.txt>nul
if errorlevel 0 if not errorlevel 1 set num=2
find "num=3" c:\num.txt>nul
if errorlevel 0 if not errorlevel 1 set num=3
echo num=%num%

运行结果是
C:\>3
num=2
C:\>_

请问像这种情况,FOR 应该怎么写?非常感谢。

[ Last edited by NaturalJ0 on 2006-8-16 at 15:22 ]
2 发表于 2006-08-16 10:14 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
UID 60484
状态 离线
难道只能调用另一个 BAT ?有没办法就在这一个 BAT 中解决问题?
3 发表于 2006-08-16 10:27 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  看了你的代码,意图似乎是读取num.txt的内容,type c:\num.txt不就成了吗?只是不知道type是不是98的内部命令。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
4 发表于 2006-08-16 10:36 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
UID 60484
状态 离线
非常感谢楼上的回复。
我的愿意是要读里面的值给变量,后面的处理中想用变量。

[ Last edited by NaturalJ0 on 2006-8-16 at 10:37 ]
5 发表于 2006-08-16 11:37 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线

@echo off
for /f "tokens=1,2 delims==" %%i in (c:\num.txt) do echo num=%%j
pause
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
6 发表于 2006-08-16 11:42 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
UID 60484
状态 离线
98 下的 FOR 没有 /f , DO 后面也不能用 ()
这个 BAT 是在 98 启动盘环境下用,要根据读来的值不同,后面利用变量有不同的操作。还有其它办法么?

[ Last edited by NaturalJ0 on 2006-8-16 at 11:44 ]
7 发表于 2006-08-16 12:35 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  98的限制还真多啊,这也不行,那也不行的。没在98下遍过批处理,没辙了。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
8 发表于 2006-08-16 12:45 ·  中国 江苏 苏州 吴中区 电信
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
UID 60484
状态 离线
是啊,以前的 DOS 里 FOR 命令功能少啊。
很感谢你花时间回复我。再等等其他人有没办法吧。实在不行,我也只能用 CALL 再去外部掉个 BAT 了,不过这样个人感觉挺不爽的。 = =b
9 发表于 2006-08-16 15:55 ·  中国 福建 泉州 电信
银牌会员
★★★
积分 1,276
发帖 469
注册 2002-12-23 13:00
UID 586
性别 男
来自 福建泉州
状态 离线
不要使用find.
使用其它的程序.例如lmod之类的.可以提取文件内容作为变量的程序.
或者.
将c:\num.txt 内容修改成
set num=2
这样就不用外部命令了.
type num.txt>~num.bat
call ~num.bat
del ~num.bat
QQ:366840202
http://chenall.net
10 发表于 2006-08-16 16:14 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
UID 60484
状态 离线
楼上好办法,非常感谢。
论坛跳转: