中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-13 22:09
中国DOS联盟论坛 » 论坛回收站 » 请高手帮忙,改写一个批处理
楼 主 请高手帮忙,改写一个批处理 发表于 2009-09-15 04:48 ·  中国 北京 鹏博士BGP
新手上路
积分 10
发帖 6
注册 2007-08-16 16:51
UID 95262
性别 男
状态 离线
我想写一个批处理文件,需求如下:
1、文件test.txt中的值为0或1;
2、如果读取的值是0,调用a.exe,如果读取的值是1则调用b.exe

这是我写的批处理:
FOR /F %%a in(test.txt) do if %%a == 0 (call a.exe) else call b.exe
在DOS6.22下执行,报语法错误,请高手帮忙改写,谢谢了!

[ Last edited by kaixin1228 on 2009-9-15 at 22:50 ]
2 发表于 2009-09-15 05:08 ·  中国 吉林 延边朝鲜族自治州 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
批处理读取的返回代码只能是%ERRORLEVEL%
1,echo;%%a看一下究竟返回的是什么
2,上传你的test.exe
3,if不需要写那么复杂,如果%%a 只存在0或1的可能,则可以直接写成 if %%a equ 0 (call a.exe) else call b.exe 或 if %%a equ 1 (call b.exe) else call a.exe
3 test.exe 发表于 2009-09-15 05:49 ·  中国 北京 鹏博士BGP
新手上路
积分 10
发帖 6
注册 2007-08-16 16:51
UID 95262
性别 男
状态 离线
test.exe的源码如下:

unsigned char main(void)
{
unsigned char value=0;

value=inport(0x1e8);
return value;
}

刚才试了一下返回值:
for /f %%a in(test.exe) do echo %%a

报语法错误

[ Last edited by kaixin1228 on 2009-9-15 at 05:56 ]
4 发表于 2009-09-15 06:05 ·  中国 吉林 延边朝鲜族自治州 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
你可以这样试一下看:

test.exe>nul 2>nul
if %ERRORLEVEL% equ 0 (echo 返回0或默认为0) else echo 成功返回1
pause

测试成功以后再改成:

test.exe>nul 2>nul
if %ERRORLEVEL% equ 0 (call a.exe) else call b.exe


[ Last edited by Hanyeguxing on 2009-9-15 at 06:07 ]
5 发表于 2009-09-15 06:14 ·  中国 北京 鹏博士BGP
新手上路
积分 10
发帖 6
注册 2007-08-16 16:51
UID 95262
性别 男
状态 离线
报Syntax error
6 发表于 2009-09-15 06:40 ·  中国 江西 南昌 电信
新手上路
积分 13
发帖 10
注册 2009-09-07 02:10
UID 151591
性别 男
状态 离线
CMD应该不会返回外部程序的%errorleve%吧
除非那个程序会返回errorlevel给CMD

比如 7Z的命令行 正确解压后就返回 0给 CMD

呵呵乱说的 我不太清楚的。
论坛跳转: