中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-02 16:39
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » [求助][讨论]有没有高手可以在纯dos下做到这个功能? 查看 3,125 回复 33
楼 主 [求助][讨论]有没有高手可以在纯dos下做到这个功能? 发表于 2008-07-27 02:31 ·  中国 河南 新乡 电信
初级用户
积分 34
发帖 16
注册 2008-07-24 17:55
17年会员
UID 122015
性别 男
状态 离线
有没有高手可以在纯dos下做到这个功能?

SMARTDRV.EXE
if exist a:\jieguo.txt del a:\jieguo.txt
md5 -c n:\tools\cfcsys.txt >a:\jieguo.txt
for /f "tokens=2" %%W in (d:\fix\cfcsys.txt) do if /i "%%W" NEQ "OK" goto end
pause
exit

:end
command.com /c n:\gamemenu\system\fix.bat >nul
pause

n:\tools\cfcsys.txt 文件实际存在。
不管用什么方法,什么软件,谁能实现这个要求?向高手求救了。!!!!!!

补充:cfcsys.txt的内容(只是范例)
\89fe32de8587b0dfd76efce00396eb56 *c:\\windows\\NOTEPAD.EXE
\82b8373ed12a602820108f6154bf0c4c *c:\\windows\\explorer.exe
\b313c22a27d1d8677cdec778346d817e *c:\\windows\\regedit.exe
\65a70ec4649499399b50ac75d911a501 *c:\\windows\\system32\\Rundll32.exe
\9cabf264ce1177cafbbba4b910a44c79 *c:\\windows\\system32\\Services.exe
\06955b9a1ce9f54be0193030ef0a6e0e *c:\\windows\\system32\\Winlogon.exe
\722a247acb86960a708528120759266d *c:\\windows\\system32\\cmd.exe
\3502114e4cb83e491a80fc361c1dc7b7 *c:\\windows\\system32\\csrss.exe

jieguo.txt的内容
c:\windows\NOTEPAD.EXE: OK
c:\windows\explorer.exe: OK
c:\windows\regedit.exe: OK
c:\windows\system32\Rundll32.exe: OK
c:\windows\system32\Services.exe: OK
c:\windows\system32\Winlogon.exe: OK
c:\windows\system32\cmd.exe: OK
c:\windows\system32\csrss.exe: OK

[ Last edited by peiliqin on 2008-7-29 at 12:12 AM ]
2 发表于 2008-07-27 21:24 ·  中国 河南 新乡 电信
初级用户
积分 34
发帖 16
注册 2008-07-24 17:55
17年会员
UID 122015
性别 男
状态 离线
用其他的方法,变通一下,或者有没有其他的dos软件可以做到?
3 发表于 2008-07-28 00:33 ·  中国 河南 新乡 电信
初级用户
积分 34
发帖 16
注册 2008-07-24 17:55
17年会员
UID 122015
性别 男
状态 离线
用其他的方法,变通一下,或者有没有其他的dos软件可以做到? 怎么没有人回答啊?
4 发表于 2008-07-28 00:38 ·  中国 河南 新乡 电信
初级用户
积分 34
发帖 16
注册 2008-07-24 17:55
17年会员
UID 122015
性别 男
状态 离线
听说,dos下有个awk可以做到,可是看不懂,搞的一头雾水。请教awk高手帮帮忙了啊。
5 发表于 2008-07-28 00:41 ·  中国 上海 杨浦区 电信
金牌会员
★★★★
积分 4,639
发帖 2,239
注册 2005-01-30 00:00
21年会员
UID 35785
性别 男
状态 离线
我不知道 d:\fix\cfcsys.txt 文件具体的内容是什么,按照你原来的意思,只要有一行中的第二个字不是 "OK" 的话就 goto end ,也就是每一行都要有 "OK" 字样,简单点的话用 find /v 配合 errorleverl 来判断。还有,为什么要用 command/c ?
6 发表于 2008-07-28 19:53 ·  中国 江苏 苏州 电信
高级用户
★★
五星老土
积分 558
发帖 172
注册 2003-02-09 00:00
23年会员
UID 881
性别 男
来自 江苏
状态 离线
看他的程序,可以猜到 CFCSYS.txt 的内容是 MD5 码 校验的结果, 只要有一个文件不通过, 就运行 FIX.BAT, FIX.BAT想必就是对没通过校验的文件进行修复之类的工作。

怎么做,我不知道,等其他人吧。

DOS因为有了FOR才变得丰富多彩,纯DOS下就那么几个命令,无法取巧,除非用第三方程序。
我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
7 发表于 2008-07-28 21:17 ·  中国 上海 杨浦区 电信
金牌会员
★★★★
积分 4,639
发帖 2,239
注册 2005-01-30 00:00
21年会员
UID 35785
性别 男
状态 离线
看看好像很简单,没什么复杂的。问题是他的 a:\jieguo.txt 好像和 d:\fix\cfcsys.txt 没什么关系,他为什么不去验证 a:\jieguo.txt 中的 OK ,而去找 d:\fix\cfcsys.txt 中的 OK ?
8 发表于 2008-07-29 00:15 ·  中国 河南 新乡 电信
初级用户
积分 34
发帖 16
注册 2008-07-24 17:55
17年会员
UID 122015
性别 男
状态 离线
Originally posted by quya at 2008-7-28 07:53 PM:
看他的程序,可以猜到 CFCSYS.txt 的内容是 MD5 码 校验的结果, 只要有一个文件不通过, 就运行 FIX.BAT, FIX.BAT想必就是对没通过校验的文件进行修复之 ...


cfcsys.txt是标准文件,jieguo.txt是个根据cfcsys.txt生成的临时文件。
9 发表于 2008-07-29 07:45 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
20年会员
UID 49283
性别 男
状态 离线
可用截取每行最后两位字符,若不等于OK,就修复的方法。
strings就可以。
Windows 一键还原
http://www.yjhy.com
10 发表于 2008-07-29 07:59 ·  中国 河南 新乡 电信
初级用户
积分 34
发帖 16
注册 2008-07-24 17:55
17年会员
UID 122015
性别 男
状态 离线
Originally posted by DOSforever at 2008-7-28 12:41 AM:
我不知道 d:\fix\cfcsys.txt 文件具体的内容是什么,按照你原来的意思,只要有一行中的第二个字不是 "OK" 的话就 goto end ,也就是每一行都要有 & ...


试了一下,当文件内容有改变的时候,总是不能确定errorlevel的值。无法进行跳转。
11 发表于 2008-07-29 08:01 ·  中国 河南 新乡 电信
初级用户
积分 34
发帖 16
注册 2008-07-24 17:55
17年会员
UID 122015
性别 男
状态 离线
Originally posted by lianjiang2004 at 2008-7-29 07:45 AM:
可用截取每行最后两位字符,若不等于OK,就修复的方法。
strings就可以。



我也看这个参数了,就是不知道怎么取 strings的值。能不能给个确切的例子?
12 发表于 2008-07-29 09:56 ·  中国 上海 杨浦区 电信
金牌会员
★★★★
积分 4,639
发帖 2,239
注册 2005-01-30 00:00
21年会员
UID 35785
性别 男
状态 离线
Originally posted by peiliqin at 2008-7-29 07:59:

试了一下,当文件内容有改变的时候,总是不能确定errorlevel的值。无法进行跳转。

我的理解是你只要有一个不是 OK,就 goto 。find/v 如果找到了一个不是 OK 的,就返回退出码0,如果没找到就返回1,说明都是 OK 。为什么“总是不能确定errorlevel的值”?
13 发表于 2008-07-29 20:18 ·  中国 山西 电信
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
使用 command /c 是想屏掉 fix.bat 的输出
但是仍然不明白 d:\fix\cfcsys.txt 与 n:\tools\cfcsys.txt 是什么关系
按照12楼的思路给个最简化的原型代码
可以参考一下


find /v /i "OK" <d:\fix\cfcsys.txt>nul
if errorlevel 1 exit
command.com /c n:\gamemenu\system\fix.bat >nul
14 发表于 2008-07-29 21:34 ·  中国 河南 新乡 电信
初级用户
积分 34
发帖 16
注册 2008-07-24 17:55
17年会员
UID 122015
性别 男
状态 离线
我的理解是你只要有一个不是 OK,就 goto 。find/v 如果找到了一个不是 OK 的,就返回退出码0,如果没找到就返回1,说明都是 OK 。为什么“总是不能确定errorlevel的值”?

我测试了,1跟0的效果一样。2的时候就完全是另外一个效果了。我可以在windows下的cmd查看上一个命令的返回码,但是在纯dos下,不知道怎么看。
15 发表于 2008-07-29 21:39 ·  中国 上海 电信
金牌会员
★★★★
积分 4,639
发帖 2,239
注册 2005-01-30 00:00
21年会员
UID 35785
性别 男
状态 离线
论坛跳转: