中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-13 19:11
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 如何获得命令执行后返回的值
楼 主 如何获得命令执行后返回的值 发表于 2008-01-02 12:55 ·  中国 广东 深圳 龙岗区 电信
中级用户
★★
积分 369
发帖 87
注册 2003-09-14 00:00
UID 9822
性别 男
状态 离线
如何获得命令执行后返回的值?
比如,有个文件,名为a.txt,内容是:
1
用type命令:
C:\>TYPE A.TXT
C:\>1
在批处理中如何获得这个type命令执行后显示的1,并把它加1后保存入a.txt中,即a.txt的内容就变为2了
C:\>TYPE A.TXT
C:\>2

环境要求:DOS6.22或DOS7.1

谢谢!
2 发表于 2008-01-03 01:27 ·  中国 上海 宝山区 电信
初级用户
积分 52
发帖 21
注册 2008-01-01 09:30
UID 107370
性别 男
状态 离线
for /f %%a in (a.txt) do set /a pp=%%a+1
echo %pp% > a.txt
3 发表于 2008-01-03 09:13 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
楼上的,dos下能用吗?呵呵。
Windows 一键还原
http://www.yjhy.com
4 发表于 2008-01-03 10:21 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
test1.bat
call test2.bat 1 2 3 4 5 6 7 8 9


test2.bat
:start1
if "%1"=="" goto end
find "%1" A.TXT
if errorlevel 0 goto xxx
shift
goto start1

:xxx
shift
echo %1>A.TXT
:end


给个思路,代码未测试
第一高手 第二高手

5 发表于 2008-01-03 11:00 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
测试代码可以了,只是执行结果echo %1>A.TXT 其实是echo 2>A.TXT,所以要加转定义符号echo ^%1>A.TXT
第一高手 第二高手

6 发表于 2008-01-03 11:40 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
加强判断errorlevel返回值
test1.bat
@echo off
call test2.bat 1 2 3 4 5 6 7 8 9


test2.bat
:start1
if "%1"=="" goto end
find "%1" A.TXT>nul
if not errorlevel 1 if errorlevel 0 goto xxx
shift
goto start1
goto end

:xxx
shift
echo ^%1>A.TXT

:end
第一高手 第二高手

7 发表于 2008-01-04 10:26 ·  中国 广东 深圳 龙岗区 电信
中级用户
★★
积分 369
发帖 87
注册 2003-09-14 00:00
UID 9822
性别 男
状态 离线
测试时不知哪里出了问题?有两个问题:
(1)出现“一般性错误读驱动器F”的提示
(2)第二次运行test1.bat后的结果还是2,而没有变成3
请指教。

下面是运行的结果

E:\>TYPE A.TXT
1

E:\>TEST1

一般性错误读驱动器F
A:放弃,R:重试,F:失败?a
E:\>type a.txt
2

e:\>test1

一般性错误读驱动器F
A:放弃,R:重试,F:失败?a
E:\>type a.txt
2

不知如何贴图,只好敲上去了
8 发表于 2008-01-04 10:48 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
出现一般性错误读驱动器F和代码无关,代码部分没尝试要访问F盘
纯DOS代码不稳定很容易出现一般性错误读驱动器F这样的错误,请检查你的批处理代码是否有访问F盘部分,或者不要加载光驱驱动。
另外6楼的代码你可以在XP下测试,代码纯DOS和XP通用的,只是纯DOS要把echo ^%1>A.TXT改为echo %1>A.TXT

[ Last edited by fastslz on 2008-1-4 at 11:04 AM ]
第一高手 第二高手

9 发表于 2008-01-04 11:56 ·  中国 广东 深圳 龙岗区 电信
中级用户
★★
积分 369
发帖 87
注册 2003-09-14 00:00
UID 9822
性别 男
状态 离线
我是按6楼的代码进行测试的,一点都没变
10 发表于 2008-01-04 12:05 ·  中国 广东 深圳 龙岗区 电信
中级用户
★★
积分 369
发帖 87
注册 2003-09-14 00:00
UID 9822
性别 男
状态 离线
(1)在XP下测试没有问题,能够替加,但到9后就不能再加了。
(2)在DOS7.1下测试就出现“一般性错误读驱动器F”。而且不会替加
11 发表于 2008-01-04 12:10 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
我猜测分析下是什么原因吧
F应该是你的光盘盘符,你启动的DOS下没有find.com外部命令,而Path变量里有%CDROM%或F:\.....,这个时候DOS就尝试读取光盘下目录寻找find.com,所以出现一般性错误读驱动器F,纯DOS下就这样没个细节都不能错。
最后再强调下纯DOS要把6楼的代码echo ^%1>A.TXT改为echo %1>A.TXT
第一高手 第二高手

12 发表于 2008-01-04 12:23 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
(1)在XP下测试没有问题,能够替加,但到9后就不能再加了。


只能是9呢也没办法,是find.com限制,因为10里面包含1,如果用sed就没有这个限制了
第一高手 第二高手

13 发表于 2008-01-04 13:02 ·  中国 广东 深圳 龙岗区 电信
中级用户
★★
积分 369
发帖 87
注册 2003-09-14 00:00
UID 9822
性别 男
状态 离线
谢谢! 真的是没有find.exe命令。加上后就OK了!

在dos7.1下就没有办法突破10以内的限制吗?
14 发表于 2008-01-04 13:11 ·  中国 广东 深圳 龙岗区 电信
中级用户
★★
积分 369
发帖 87
注册 2003-09-14 00:00
UID 9822
性别 男
状态 离线
在新DOS时代网站的DOS使用中有介绍count,加法计算的工具,但不知哪里有下载?论坛里没找到
15 发表于 2008-01-04 13:22 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
UID 54766
性别 男
来自 上海
状态 离线
@echo off
call test2.bat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
:start1
if "%1"=="" goto end
sed -n "/%1/p" A.TXT>nul
if not errorlevel 1 if errorlevel 0 goto xxx
shift
goto start1
goto end

:xxx
shift
echo %1>A.TXT

:end

sed纯DOS版我的google论坛上有,点我签名连接
sed用法http://sed.sourceforge.net/sed1line_zh-CN.html
第一高手 第二高手

论坛跳转: