|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|