中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-09 02:57
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助]2个文件比较的问题
可打印版本  3,273 / 52
第1楼 quya 发表于 2008-07-09 11:28
高级用户 发帖 172 积分 558 来自 江苏
[求助]2个文件比较的问题
假定我有以下2个文件

1.txt


2.txt



现在我得到一个变量值,比如 HEDY,是在文件 1.txt中的行的第一个值。

我对2.txt中路径中的文件(如果是压缩文件则先EXPAND)进行CRC32 校验, 运行 CRC32.EXE, 假定得到的CRC 输出结果在第一行第2个Token, 然后和文件 1.txt第2行值比较,IF FIND, 则把对应的路径赋值给一个变量。

如何在不用第三方程序的前提下高效简洁易懂地写出代码? 谢谢。

补充一下,CRC值校验只运行一次, 但可能要多次调用校验的结果, 所以生成如下的结果文件比较恰当.



[ Last edited by quya on 2008-7-9 at 12:01 PM ]
第2楼 huahua0919 发表于 2008-07-09 12:40
银牌会员 发帖 780 积分 1,608
你这个是不是进行md5效验后检查是否为病毒附本的?
第3楼 bat-zw 发表于 2008-07-09 13:19
金牌会员 发帖 1,276 积分 3,105
没用过crc32,估摸着写的:


[ Last edited by zw19750516 on 2008-7-9 at 01:27 PM ]
第4楼 quya 发表于 2008-07-09 13:35
高级用户 发帖 172 积分 558 来自 江苏
我这个问题想想还是比较复杂的.

1. 首先要把未解压的释放到临时目录校验, 因为最初目录可能是只读的,这种情况下要保存原先未解压的路径值.

2. 就像我一楼帖子最后补充的, 我要把结果放到一个文件中多次调用. 至于CRC运行命令格式和结果是次要的, 只要知道它一定会输出个结果就是了. 就像3楼一样我们只要知道有那么个CRC.TXT文件,里边有各式各样的值就可以了.

3. 难的是把比较以后的结果, 即把1.txt, 2.txt, crc.txt 通过一个特征值再次输出.
第5楼 26933062 发表于 2008-07-09 13:41
银牌会员 发帖 879 积分 2,268
最好能给出部分crc.txt文件的的样本来。。。
第6楼 quya 发表于 2008-07-09 13:53
高级用户 发帖 172 积分 558 来自 江苏
Originally posted by 26933062 at 2008-7-9 01:41 PM:
最好能给出部分crc.txt文件的的样本来。。。


我记不得样本了,但这是个普遍问题.




为了具有普遍性, 假定我先设法得到以下一个 CRC 文件(其实这个文件可以不要,只要最后结果,但不妨一步一步来)

CRC.TXT



最后我想得到的就是类似下面这个结果



这个问题用文字描述的话就是这样。

我电脑装了VOL版的XP,现在我想改成OEM版的, 我的主板具备了OEM特征, 我有一大堆OEMBIOS文件可用来替换系统所需要的文件。 为了查找准确的OEMBIOS文件, 我把它们放在一个个特定的文件夹中以便程序来自动寻找。

后来我想想能否再准确一点, 比如我在文件夹中放错了文件,我如果随便放在一个文件夹中呢?能否编个批处理快捷准确地找到呢?

问题就是这样来的。而且我发现这个问题也可以应用在别的地方, 类似的查找应用例子应该不少.

[ Last edited by quya on 2008-7-9 at 02:19 PM ]
第7楼 26933062 发表于 2008-07-09 14:34
银牌会员 发帖 879 积分 2,268
说了一大堆,从1楼到6楼我都没明白你的意图到底是什么。
估摸着写了个代码。先看对不对吧。。。
注意:没考虑crc.txt中的文件名及路径含空格的情况,也没考虑1.txt内容第一列含空格的情况。
且crc.txt的???部分没有重复的前提下。
:

[ Last edited by 26933062 on 2008-7-9 at 02:42 PM ]
第8楼 quya 发表于 2008-07-09 15:24
高级用户 发帖 172 积分 558 来自 江苏
假如我运行 (为简化,先暂时不考虑OEMBIOS.CA_ 解压到临时目录OEMBIOS.CAT的问题 )



得到一个 crc.txt, 这个也是模拟的, 实际上可能不是这样简单, 但我会处理了.



第一个问题:

我如何把 2.txt 和 CRC.txt 合并成以下文件 temp.txt(如果能直接解决第2个问题,这个文件可以不要)

temp.txt (表中除了2个值是真实的,其他是我虚拟的)

路径 CRC值

G:\I386\OEMBIOS.CA_ 3261089
G:\WXPOEM\1\OEMBIOS.CAT 9308173
G:\WXPOEM\2\OEMBIOS.CAT 2513351
G:\WXPOEM\3\OEMBIOS.CA_ 4769779
G:\WXPOEM\4\OEMBIOS.CAT 2389039
G:\WXPOEM\5\OEMBIOS.CAT 162C7931
G:\WXPOEM\6\OEMBIOS.CAT 3468033
G:\WXPOEM\7\OEMBIOS.CAT 3351192
G:\WXPOEM\8\OEMBIOS.CAT 3627383
F:\cpl\thif\OEMBIOS.CA_ 8631970
F:\新建文件夹\Acer\OEMBIOS.CA_ 3820293
F:\新建文件夹\xxx\OEMBIOS.CA_ 7B06BD13
F:\新建文件夹\Lenovo\oembios.ca_ 4832250
F:\新建文件夹\xx\OEMBIOS.CA_ 8878816


第二个问题

如何根据 temp.txt 和 1.txt 通过一个共同的CRC值 得到如下文件


第三个问题

不简化步骤,解决我的实际问题。

实际上,CRC只是个过渡,我只是通过CRC值找到我需要的特定文件的目录,而且这个特定文件可能是CAB压缩的在只读盘上,我不得不先解压再检测。如果不需要上面我说的复杂的步骤,那么再好也不过了。

我真正需要的最终结果类似下面的式样:

不限下面这2个值, 也可能只有一个值, 或者没找到无结果.



[ Last edited by quya on 2008-7-9 at 04:10 PM ]
第9楼 26933062 发表于 2008-07-09 16:16
银牌会员 发帖 879 积分 2,268
问题的关键在于运行crc32.exe 的结果到底是怎样的我们不知道。
你先运行下面的代码把结果帖出来看看。。
:
第10楼 terse 发表于 2008-07-09 16:19
银牌会员 发帖 946 积分 2,404
第11楼 quya 发表于 2008-07-09 16:45
高级用户 发帖 172 积分 558 来自 江苏
To: 9楼

我手头现在没CRC软件, 我要晚上才知道, 你假定最简单的好了, 就是 CRC32.EXE Filename 输出结果 CRC值, 因为不管CRC实际运行结果, 我都知道怎么处理,这个不是关键.

To: 10楼

下班之后我验证一下你的代码, 三个嵌套的 FOR, 看得我头晕, 可能你的代码在 OEMBIOS全部解压的情况下会正确运行, 但考虑压缩的OEMBIOS.CA_ , 情况就会复杂化, 能否先生成下中间文件, 让我解析一下, 以便解决实际问题.

谢谢大家了.
第12楼 quya 发表于 2008-07-09 17:10
高级用户 发帖 172 积分 558 来自 江苏
10楼的思路基本准确,我根据10楼的意思修改了第2个FOR 循环 验证了下。



运行结果是:(能否再完善并提高效率?谢谢!) %i 未正确显示路径! 我主要目的是取得路径.

HEDY 162C7931 %i
LEGEND 7B06BD13 %i
HEDY 162C7931 %i
LEGEND 7B06BD13 %i
HEDY 162C7931 %i
LEGEND 7B06BD13 %i
HEDY 162C7931 %i
LEGEND 7B06BD13 %i
HEDY 162C7931 %i
LEGEND 7B06BD13 %i
HEDY 162C7931 %i
LEGEND 7B06BD13 %i
HEDY 162C7931 %i
LEGEND 7B06BD13 %i
HEDY 162C7931 %i
LEGEND 7B06BD13 %i
HEDY 162C7931 %i
LEGEND 7B06BD13 %i
HEDY 162C7931 %i
LEGEND 7B06BD13 %i
HEDY 162C7931 %i
LEGEND 7B06BD13 %i
HEDY 162C7931 %i
LEGEND 7B06BD13 %i
HEDY 162C7931 %i
LEGEND 7B06BD13 %i
HEDY 162C7931 %i
LEGEND 7B06BD13 %i
请按任意键继续. . .


至于 CRC.TXT 文件的取得, 我初步的设想是下面代码, 未运行验证,可能要用到延迟变量之类的东东。



[ Last edited by quya on 2008-7-9 at 05:13 PM ]
第13楼 zh159 发表于 2008-07-09 17:23
金牌会员 发帖 1,467 积分 3,687
10 楼写错一个字符,所以 12 楼运行有点错误
@echo off
for /f "delims=" %%i in (2.txt) do (
for /f "delims=" %%j in ('crc32 "%%i"') do (
for /f "delims=" %%k in ('findstr /ic:"%%j" "1.txt"') do (
if not "%%k"=="" echo %%k %%i
)
)
)
pause
第14楼 bat-zw 发表于 2008-07-09 17:28
金牌会员 发帖 1,276 积分 3,105
假设你的winrar存放路径是c:\progra~1\winrar\,如下:


[ Last edited by zw19750516 on 2008-7-9 at 06:04 PM ]
第15楼 quya 发表于 2008-07-09 17:31
高级用户 发帖 172 积分 558 来自 江苏
Originally posted by zh159 at 2008-7-9 05:23 PM:
10 楼写错一个字符,所以 12 楼运行有点错误


不行, 路径名根本没用处. 即时J 改成 I 得到的是错误结果.

谢谢10楼和其他帮忙的朋友, 能否再看看. 我是横竖动不出脑筋了.
1 2 3 4  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023