中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] [3] [4] »
作者:
标题: [求助]2个文件比较的问题 上一主题 | 下一主题
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 16 楼』:  

如果10楼的代码可行的话,那么这样效率应该高些。
:
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims= " %%a in (1.txt) do set "%%b=%%a"
for /f "delims=" %%a in (2.txt) do (
   for /f "delims=" %%b in ('crc32 "%%a"') do (
      if defined %%b echo !%%b! %%a
))
pause




致精致简!
2008-7-9 18:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 17 楼』:  

上面的代码都不行啊, 不过还是衷心感谢大家.

我想先从简单的开始, 我有一个很小的CRC32 程序

到我 ftp://quya.2mydns.com/crc32.com 下载

此程序在代码页437下运行, 而且不支持长文件名和带有空格的目录, 但用以下代码可以得到正确的结果.
for /f "delims==" %i in (2.txt) do (if /i %~xi==.cat (crc32 %~fsi>>crc.txt) else (expand %~fsi %temp%\oembios.cat&crc32 %temp%\oembios.cat>>crc.txt))
2.txt 文件内容如下:

  Quote:
G:\IBM\oembios.cat
G:\IBM\OEMBIOS.CA_
G:\WXPOEM\IBM\I386\OEMBIOS.CA_
G:\xpdos\I386\OEMBIOS.CA_
G:\xpdos\WXPOEM\ACER\OEMBIOS.CAT
G:\xpdos\WXPOEM\ASUS\OEMBIOS.CA_
G:\xpdos\WXPOEM\DELL\OEMBIOS.CAT
G:\xpdos\WXPOEM\HPQ\OEMBIOS.CAT
G:\xpdos\WXPOEM\IBM\OEMBIOS.CAT
G:\xpdos\WXPOEM\LENOVO\OEMBIOS.CAT
F:\e\Backup\Tools\OEM 5文件\Acer\OEMBIOS.CA_
F:\e\Backup\Tools\OEM 5文件\COMPAQ\OEMBIOS.CA_
F:\e\Backup\Tools\OEM 5文件\HEDY\OEMBIOS.CA_
F:\e\Backup\Tools\OEM 5文件\HP\OEMBIOS.CA_
F:\e\Backup\Tools\OEM 5文件\IBM\OEMBIOS.CA_
F:\e\Backup\Tools\OEM 5文件\Legend\OEMBIOS.CA_
F:\e\Backup\Tools\OEM 5文件\SAMSUNG\OEMBIOS.CA_
F:\e\Backup\Tools\OEM 5文件\Sony\OEMBIOS.CA_
F:\FTP\Up\2003ent\OEMBIOS.CA_
E:\OEM 文件\ACER\OEMBIOS.CAT
E:\OEM 文件\LEGEND\OEMBIOS.CA_

运行的结果如下:

  Quote:
G:\IBM\oembios.cat D7A77612
C:\WINXP\TEMP\oembios.cat D7A77612
C:\WINXP\TEMP\oembios.cat D7A77612
C:\WINXP\TEMP\oembios.cat 90BBDCA0
G:\xpdos\WXPOEM\ACER\OEMBIOS.CAT 717B6EF3
C:\WINXP\TEMP\oembios.cat B20C65BF
G:\xpdos\WXPOEM\DELL\OEMBIOS.CAT B6F0EEFD
G:\xpdos\WXPOEM\HPQ\OEMBIOS.CAT CD4E1902
G:\xpdos\WXPOEM\IBM\OEMBIOS.CAT D7A77612
G:\xpdos\WXPOEM\LENOVO\OEMBIOS.CAT 5237B729
C:\WINXP\TEMP\oembios.cat 700A8481
C:\WINXP\TEMP\oembios.cat 74572CCF
C:\WINXP\TEMP\oembios.cat 162C7931
C:\WINXP\TEMP\oembios.cat 74572CCF
C:\WINXP\TEMP\oembios.cat D7A77612
C:\WINXP\TEMP\oembios.cat 7B06BD13
C:\WINXP\TEMP\oembios.cat 904CF15A
C:\WINXP\TEMP\oembios.cat 74572CCF
C:\WINXP\TEMP\oembios.cat 57E3E3DC
E:\OEM文~1\ACER\OEMBIOS.CAT 717B6EF3
C:\WINXP\TEMP\oembios.cat 7B06BD13

先解决以下问题, 如何把临时目录 C:\WINXP\TEMP\ 还原成本来目录.

然后再慢慢来, 谢谢大家, 老土的脑筋现在有点不好使.

[ Last edited by quya on 2008-7-9 at 09:42 PM ]



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-7-9 21:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 18 楼』:  

越来越不知道你要干什么了?
G:\IBM\oembios.cat D7A77612
C:\WINXP\TEMP\oembios.cat D7A77612
C:\WINXP\TEMP\oembios.cat D7A77612
C:\WINXP\TEMP\oembios.cat 90BBDCA0
G:\xpdos\WXPOEM\ACER\OEMBIOS.CAT 717B6EF3
C:\WINXP\TEMP\oembios.cat B20C65BF
G:\xpdos\WXPOEM\DELL\OEMBIOS.CAT B6F0EEFD
G:\xpdos\WXPOEM\HPQ\OEMBIOS.CAT CD4E1902
G:\xpdos\WXPOEM\IBM\OEMBIOS.CAT D7A77612
G:\xpdos\WXPOEM\LENOVO\OEMBIOS.CAT 5237B729
C:\WINXP\TEMP\oembios.cat 700A8481
C:\WINXP\TEMP\oembios.cat 74572CCF
C:\WINXP\TEMP\oembios.cat 162C7931
C:\WINXP\TEMP\oembios.cat 74572CCF
C:\WINXP\TEMP\oembios.cat D7A77612
这些是crc.txt的内容吗?
如果是,难道7楼的代码不行?



致精致简!
2008-7-9 21:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 19 楼』:  



  Quote:
Originally posted by 26933062 at 2008-7-9 09:36 PM:
越来越不知道你要干什么了?
G:\IBM\oembios.cat D7A77612
C:\WINXP\TEMP\oembios.cat D7A77612
C:\WINXP\TEMP\oembios.cat D7A77612
C:\WINXP\TEMP\oembios.cat 90BBDCA0
G:\xpdos\WXPOEM\ACE ...

下午在单位没试你的代码, 对不起, 刚才试了下, 正确而且速度很快.

但是能否解决在压缩文件的情况下还原本来目录的问题. 17楼我提到的问题.

能解释下 for /f "tokens=1* delims= " %%a in (1.txt) do set %%b=%%a 这句意思吗?  %%b 是第2个 token, 也就是 "1*" 中的 "*", 怎么还可以赋值, 实在看不懂啊 .

再编辑, 有点知道了, 这样生成了很多变量, 变量名取第2个token, 赋的值是第一个, 我担心的是, 如果我文件很长, 变量名这么多会不会溢出而出错?

因为小时候就知道, 要节省变量名和及时释放变量, 我那个时候的内存是小得可怜的, 不敢用太多变量.


[ Last edited by quya on 2008-7-9 at 10:02 PM ]



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-7-9 21:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 20 楼』:  

不理解
是2.txt中有压缩文件?
crc32.exe 可以对其进行解压缩?并且解压到C:\WINXP\TEMP\目录?
本来目录又是什么目录?



致精致简!
2008-7-9 21:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 21 楼』:  



  Quote:
Originally posted by 26933062 at 2008-7-9 09:52 PM:
不理解
是2.txt中有压缩文件?
crc32.exe 可以对其进行解压缩?并且解压到C:\WINXP\TEMP\目录?
本来目录又是什么目录?

是的, 文件名扩展名是 .ca_ 的就是压缩文件, 需要expand 再对它校验, 请参照我17楼的解压代码, 谢谢.



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-7-9 22:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 22 楼』:  

老土测试了我14的代码吗?我里面加了对rar文件的判断和解压,你只要自己改下就可以了。

[ Last edited by zw19750516 on 2008-7-9 at 10:20 PM ]



批处理之家新域名:www.bathome.net
2008-7-9 22:11
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 23 楼』:  



  Quote:
Originally posted by zw19750516 at 2008-7-9 10:11 PM:
老土测试了我14的代码吗?我里面加了对rar文件的判断和解压,你只要自己改下后缀就可以了。

谢谢你的代码, 但

1. 解压不是 WINRAR, 当然这个我可以改
2. 最关键的是你解压在当前目录了, 而当前目录可能只读, 所以一定要解到临时目录

由于2的问题, 如何取得原来目录就成了问题.



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-7-9 22:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 24 楼』:  

根据你17楼代码改进,获取原目录及文件名
至于你说变量益处,这个问题我还没遇到过,
作了个简单的测试,十万个变量名没发现错误的现象。我的物理内存是128m
但如果你的1.txt内容很长的话,你用前面的代码for+findstr估计你会等到头发变白。。。
@echo off
for /f "delims==" %%i in (2.txt) do (
  if /i %%~xi==.cat (crc32 %%~fsi>>crc.txt) else (
    expand %~fsi %temp%\oembios.cat
    for /f "tokens=2" %%a in ('crc32 %temp%\oembios.cat') do echo %%i %%a>>crc.txt
))
[ Last edited by 26933062 on 2008-7-9 at 10:34 PM ]



致精致简!
2008-7-9 22:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 25 楼』:  

我日,好麻烦,这下可以解决你的问题了吧:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (2.txt) do (
    if /i "%%~xi" equ ".cat" (
       crc32 %%~fsi>>crc.txt
       ) else (
      expand "%%i" %temp%\oembios.cat
      for /f "tokens=2" %%a in ('crc32 %temp%\oembios.cat') do set str=%%a
      echo %%i !str!>>crc.txt
      del /q %temp%\oembios.cat
))
for /f "tokens=1,2" %%a in (1.txt) do (
     for /f "delims=" %%i in ('findstr "%%b" crc.txt') do echo %%a %%i
)
pause>nul
[ Last edited by zw19750516 on 2008-7-9 at 11:25 PM ]



批处理之家新域名:www.bathome.net
2008-7-9 22:35
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 26 楼』:  

不好意思24楼说的十万个变量名,没测试完,实际测试是四万个。



致精致简!
2008-7-9 22:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 27 楼』:  

24, 25 楼的代码 %~fsi  都 少了个 %, 不过这容易改.

25楼运行结果不是太理想:

  Quote:
G:\IBM\oembios.cat D7A77612
G:\IBM\OEMBIOS.CA_ D7A77612
G:\WXPOEM\IBM\I386\OEMBIOS.CA_ D7A77612
G:\xpdos\I386\OEMBIOS.CA_ 90BBDCA0
G:\xpdos\WXPOEM\ACER\OEMBIOS.CAT 717B6EF3
G:\xpdos\WXPOEM\ASUS\OEMBIOS.CA_ B20C65BF
G:\xpdos\WXPOEM\DELL\OEMBIOS.CAT B6F0EEFD
G:\xpdos\WXPOEM\HPQ\OEMBIOS.CAT CD4E1902
G:\xpdos\WXPOEM\IBM\OEMBIOS.CAT D7A77612
G:\xpdos\WXPOEM\LENOVO\OEMBIOS.CAT 5237B729
F:\e\Backup\Tools\OEM 5文件\Acer\OEMBIOS.CA_ ??
F:\e\Backup\Tools\OEM 5文件\COMPAQ\OEMBIOS.CA_ ??
F:\e\Backup\Tools\OEM 5文件\HEDY\OEMBIOS.CA_ ??
F:\e\Backup\Tools\OEM 5文件\HP\OEMBIOS.CA_ ??
F:\e\Backup\Tools\OEM 5文件\IBM\OEMBIOS.CA_ ??
F:\e\Backup\Tools\OEM 5文件\Legend\OEMBIOS.CA_ ??
F:\e\Backup\Tools\OEM 5文件\SAMSUNG\OEMBIOS.CA_ ??
F:\e\Backup\Tools\OEM 5文件\Sony\OEMBIOS.CA_ ??
F:\FTP\Up\2003ent\OEMBIOS.CA_ 57E3E3DC
E:\OEM ??
E:\OEM 文件\LEGEND\OEMBIOS.CA_ ??

24楼运行结果接近完美:

  Quote:
G:\IBM\oembios.cat D7A77612
G:\IBM\OEMBIOS.CA_ D7A77612
G:\WXPOEM\IBM\I386\OEMBIOS.CA_ D7A77612
G:\xpdos\I386\OEMBIOS.CA_ 90BBDCA0
G:\xpdos\WXPOEM\ACER\OEMBIOS.CAT 717B6EF3
G:\xpdos\WXPOEM\ASUS\OEMBIOS.CA_ B20C65BF
G:\xpdos\WXPOEM\DELL\OEMBIOS.CAT B6F0EEFD
G:\xpdos\WXPOEM\HPQ\OEMBIOS.CAT CD4E1902
G:\xpdos\WXPOEM\IBM\OEMBIOS.CAT D7A77612
G:\xpdos\WXPOEM\LENOVO\OEMBIOS.CAT 5237B729
F:\e\Backup\Tools\OEM 5文件\Acer\OEMBIOS.CA_ B20C65BF
F:\e\Backup\Tools\OEM 5文件\COMPAQ\OEMBIOS.CA_ B20C65BF
F:\e\Backup\Tools\OEM 5文件\HEDY\OEMBIOS.CA_ B20C65BF
F:\e\Backup\Tools\OEM 5文件\HP\OEMBIOS.CA_ B20C65BF
F:\e\Backup\Tools\OEM 5文件\IBM\OEMBIOS.CA_ B20C65BF
F:\e\Backup\Tools\OEM 5文件\Legend\OEMBIOS.CA_ B20C65BF
F:\e\Backup\Tools\OEM 5文件\SAMSUNG\OEMBIOS.CA_ B20C65BF
F:\e\Backup\Tools\OEM 5文件\Sony\OEMBIOS.CA_ B20C65BF
F:\FTP\Up\2003ent\OEMBIOS.CA_ 57E3E3DC
E:\OEM ??
E:\OEM 文件\LEGEND\OEMBIOS.CA_ 57E3E3DC

但想不通的是倒数第2个结果会这样?!!

我仔细看了代码, 没错误啊.

用下边语句检测也没问题啊, 晕倒!
for /f "delims=" %i in (2.txt) do echo %~fsi
大家辛苦了!!! 万分感谢!!

[ Last edited by quya on 2008-7-9 at 11:08 PM ]



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-7-9 23:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 28 楼』:  

如不要生成临时的crc.txt:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (2.txt) do (
     if /i "%%~xa" equ ".cat" (
        for /f "tokens=2" %%d in ('crc32 %%~fsa') do set str=%%d     
        ) else (
        expand "%%a" %temp%\oembios.cat
        for /f "tokens=2" %%d in ('crc32 %%temp%\oembios.cat') do set str=%%d
     )
     for /f "tokens=1,2" %%b in (1.txt) do echo !str!|findstr "%%c">nul&&echo %%b %%a !str!
     del /q /f %temp%\oembios.cat
)
pause>nul
[ Last edited by zw19750516 on 2008-7-9 at 11:31 PM ]



批处理之家新域名:www.bathome.net
2008-7-9 23:09
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 29 楼』:  

仔细看了下, 还是有问题.

  Quote:
F:\e\Backup\Tools\OEM 5文件\Acer\OEMBIOS.CA_ B20C65BF
F:\e\Backup\Tools\OEM 5文件\COMPAQ\OEMBIOS.CA_ B20C65BF
F:\e\Backup\Tools\OEM 5文件\HEDY\OEMBIOS.CA_ B20C65BF
F:\e\Backup\Tools\OEM 5文件\HP\OEMBIOS.CA_ B20C65BF
F:\e\Backup\Tools\OEM 5文件\IBM\OEMBIOS.CA_ B20C65BF
F:\e\Backup\Tools\OEM 5文件\Legend\OEMBIOS.CA_ B20C65BF
F:\e\Backup\Tools\OEM 5文件\SAMSUNG\OEMBIOS.CA_ B20C65BF
F:\e\Backup\Tools\OEM 5文件\Sony\OEMBIOS.CA_ B20C65BF

这里全部一样了.



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-7-9 23:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 30 楼』:  



  Quote:
Originally posted by quya at 2008-7-9 23:06:
24, 25 楼的代码 %~fsi  都 少了个 %, 不过这容易改.

25楼运行结果不是太理想:



24楼运行结果接近完美:



但想不通的是倒数第2个结果会这样?!!
...

难道1.txt是多余的?



批处理之家新域名:www.bathome.net
2008-7-9 23:16
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
« [1] [2] [3] [4] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: