|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
『楼 主』:
遇到文件比较的难题
有两个文件f.TXT和L.TXT内容如下:
ExecutablePath Name
System Idle Process
System
C:\windows\System32\smss.exe smss.exe
C:\windows\system32\csrss.exe csrss.exe
C:\windows\system32\winlogon.exe winlogon.exe
C:\windows\system32\services.exe services.exe
C:\windows\system32\lsass.exe lsass.exe
C:\windows\system32\svchost.exe svchost.exe
C:\windows\system32\svchost.exe svchost.exe
C:\windows\System32\svchost.exe svchost.exe
C:\windows\system32\svchost.exe svchost.exe
C:\windows\system32\spoolsv.exe spoolsv.exe
C:\windows\system32\nvsvc32.exe nvsvc32.exe
D:\SMALL\WINVNC\winvnc.exe winvnc.exe
D:\SMALL\WINVNC\winvnc.exe winvnc.exe
C:\windows\Explorer.EXE explorer.exe
C:\windows\system32\ctfmon.exe ctfmon.exe
C:\windows\system32\cmd.exe cmd.exe
C:\windows\system32\conime.exe conime.exe
C:\WINDOWS\system32\wbem\wmiprvse.exe wmiprvse.exe
C:\windows\System32\Wbem\wmic.exe wmic.exe L.TXT内容如下
ExecutablePath Name
System Idle Process
System
C:\windows\System32\smss.exe smss.exe
C:\windows\system32\csrss.exe csrss.exe
C:\windows\system32\winlogon.exe winlogon.exe
C:\windows\system32\services.exe services.exe
C:\windows\system32\lsass.exe lsass.exe
C:\windows\system32\svchost.exe svchost.exe
C:\windows\system32\svchost.exe svchost.exe
C:\windows\System32\svchost.exe svchost.exe
C:\windows\system32\svchost.exe svchost.exe
C:\windows\system32\spoolsv.exe spoolsv.exe
C:\windows\system32\nvsvc32.exe nvsvc32.exe
D:\SMALL\WINVNC\winvnc.exe winvnc.exe
D:\SMALL\WINVNC\winvnc.exe winvnc.exe
C:\windows\Explorer.EXE explorer.exe
C:\windows\system32\ctfmon.exe ctfmon.exe
C:\windows\system32\cmd.exe cmd.exe
C:\windows\system32\conime.exe conime.exe
C:\WINDOWS\system32\wbem\wmiprvse.exe wmiprvse.exe
C:\windows\system32\notepad.exe notepad.exe
C:\windows\System32\Wbem\wmic.exe wmic.exe 使用FC /C F.TXT L.TXT得到结果如下
正在比较文件 f.txt 和 L.TXT>ok.txt
***** f.txt
C:\WINDOWS\system32\wbem\wmiprvse.exe wmiprvse.exe
C:\windows\System32\Wbem\wmic.exe wmic.exe
***** L.TXT
C:\WINDOWS\system32\wbem\wmiprvse.exe wmiprvse.exe
C:\windows\system32\notepad.exe notepad.exe
C:\windows\System32\Wbem\wmic.exe wmic.exe
***** 很明显FC有缺点,我比较时只想找出不同的内容并输入到OK.TXT中,按照上面的两个文件,实际上不同的地方只有C:\windows\system32\notepad.exe notepad.exe 这行文本,我使用FOR来,也没有实现.请问各位高手如何实现这样的效果,主要用来比较进程前后的变化并做出报告,谢谢。
|
|
2009-8-12 00:32 |
|
|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
『第
2 楼』:
找到方法了,好简单好强大的一条命令就可以搞定.
findstr /v /g:f.txt l.txt
|
|
2009-8-12 00:54 |
|
|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
『第
3 楼』:
findstr /v /g:f.txt l.txt 好象也有问题,我换成另外两个内容非常长的文件则结果不正确。
|
|
2009-8-13 01:19 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
4 楼』:
fc 后再findstr呢?
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2009-8-13 01:41 |
|
|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
『第
5 楼』:
Quote: | Originally posted by slore at 2009-8-13 01:41:
fc 后再findstr呢? |
|
fc +findstr也难以实现,我主要是比较操作系统里的文件和注册表前后的变化。
据说LINUX下的COMM和DIFF具有这个功能,因为FC命令只能列出两个文件中不同的部分,却没有只列出第二个文件或第一个文件不同的部分,而COMM具有这个功能,但是我没有LINUX,不知道谁能否给我一个看下在WIN下是否正常。
|
|
2009-8-13 01:54 |
|
|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
『第
6 楼』:
这个两个命令如下
果想对两个有序的文件进行比较,可以使用comm命令。
语法:comm [- 123 ] file1 file2
说明:该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件,然后生成三列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名用“- ”,则表示从标准输入读取。
选项1、2或3抑制相应的列显示。
例如comm - 12就只显示在两个文件中都存在的行;
comm - 23只显示在第一个文件中出现而未在第二个文件中出现的行;
comm - 123则什么也不显示。
# comm -23 b a >c ##只显示只在b中 不在a中的所有b中的行
注意:使用这个命令前一定要用sort uniq进行排序及除重
不过awk这个优秀的命令也能做到还不用排序处理
awk 'NR==FNR{a[$0]++} NR>FNR&&!a[$0]' file1 file2 找出文件2中不同的值
awk 'NR==FNR{a[$0]++} NR>FNR&&a[$0]' file1 file2 找出两文件中相同的值
或
awk 'NR==FNR{a[$0]}NR>FNR{ if(!($1 in a)) print $0}' file1 file2 找出文件2中不同的值
awk 'NR==FNR{a[$0]}NR>FNR{ if($1 in a) print $0}' file1 file2 找出两文件中相同的值
----------------------------------------------------
Diff命令
该命令的功能为逐行比较两个文本文件,列出其不同之处。它比comm命令完成更复杂的检查。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。
语法:diff [选项] file1 file2
说明:该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。如果用“- ”表示file1或fiie2,则表示标准输入。如果file1或file2是目录,那么diff将使用该目录中的同名文件进行比较。例如:
diff /usr/xu mine
把目录/usr/xu 中名为mine的文件与当前目录中的mine文件进行比较。
通常输出由下述形式的行组成:
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4
这些行类似ed命令把filel转换成file2。字母(a、d和c)之前的行号(n1,n2)是针对file1的,其后面的行号(n3,n4)是针对file2的。字母a、d和c分别表示附加、删除和修改操作。
在上述形式的每一行的后面跟随受到影响的若干行,以“<”打头的行属于第一个文件,以“>”打头的行属于第二个文件。
diff能区别块和字符设备文件以及FIFO(管道文件),不会把它们与普通文件进行比较。
如果file1和file2都是目录,则diff会产生很多信息。如果一个目录中只有一个文件,则产生一条信息,指出该目录路径名和其中的文件名。
diff各选项的含义如下:
- b 忽略行尾的空格,而字符串中的一个或多个空格符都视为相等。如How are you与How are you被视为相同的字符串。
- c 采用上下文输出格式(提供三行上下文)。
- C n 采用上下文输出格式(提供n行上下文)。
- e 产生一个合法的ed脚本作为输出。
- r 当file1和file2是目录时,递归作用到各文件和目录上。
|
|
2009-8-13 01:56 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
7 楼』:
我主要是比较操作系统里的文件和注册表前后的变化。
regshot32
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2009-8-13 02:17 |
|
|
gene771771
初级用户
积分 105
发帖 77
注册 2006-11-9 来自 重庆
状态 离线
|
『第
8 楼』:
Quote: | Originally posted by slore at 2009-8-13 02:17:
我主要是比较操作系统里的文件和注册表前后的变化。
regshot32 |
|
用注册表监控RegSpy也可以检测...
|
|
2009-8-13 04:33 |
|
|
ZJHJ
高级用户
积分 609
发帖 374
注册 2006-8-2
状态 离线
|
『第
9 楼』:
用批处理比较程序变化,比如系统文件的所有exe、inf、dll、或者是所有*.*文件,日期变化,文件大小变化.或增加了文件,单用fc或简单命令都不会使你很满意.如果有几千行或更多........
你是不是想达到这个效果:
检查时间: 2009-08-13 星期四 17:40:04.41
原文件 11648行,913101字节
2008-06-06 06:06 C:\dosh\ghos\38,4 1KG_su.exe
★2008-06-06 06:06 C:\dosh\ghos\38,400 1KG_su.exe
2008-06-16 06:06 C:\dosh\ghos\100,352 gho_run.exe
★2008-06-06 06:06 C:\dosh\ghos\100,352 gho_run.exe
2009-04-29 21:41 C:\ProgramFiles\360Safebox\1,398,281 360safebox.exe
★2009-04-29 21:40 C:\ProgramFiles\360Safebox\1,398,280 360safebox.exe
2009-A6-22 22:14 C:\ProgramFiles\5F800Client\408,737 uninst.exe
★2009-06-22 22:14 C:\ProgramFiles\5F800Client\408,737 uninst.exe
2006-03-30 16:45 C:\ProgramFiles\Adobe\Acrobat7.0\Reader\313,471 AdobeUpdateManager.exe
★2006-03-30 16:45 C:\ProgramFiles\Adobe\Acrobat7.0\Reader\313,472 AdobeUpdateManager.exe
2008-A8-22 19:41 C:\ProgramFiles\CommonFiles\Real\GToolbar\1,256,488 GoogleToolbarInstaller.exe
★2008-08-22 19:41 C:\ProgramFiles\CommonFiles\Real\GToolbar\1,256,488 GoogleToolbarInstaller.exe
2009-07-31 16:42 C:\ProgramFiles\ESET\ESETNOD32Antivirus \68,540 callmsi.exe
★2009-07-30 16:42 C:\ProgramFiles\ESET\ESETNOD32Antivirus \68,520 callmsi.exe
2009-07-30 16:52 C:\ProgramFiles\ESET\ESETNOD32Antivirus \60,280 ecmd.exe
★2009-07-30 16:42 C:\ProgramFiles\ESET\ESETNOD32Antivirus \60,280 ecmd.exe
2008-06-16 13:35 C:\ProgramFiles\SogouInput\193,841 ScdViewer.exe
★2008-06-16 13:35 C:\ProgramFiles\SogouInput\193,840 ScdViewer.exe
2007-05-18 06:27 C:\ProgramFiles\TTPlayer\Plugins\Dfx\Apps\135,A68 record_email.exe
★2007-05-18 06:27 C:\ProgramFiles\TTPlayer\Plugins\Dfx\Apps\135,168 record_email.exe
★2008-02-08 08:47 C:\WINDOWS\drivers\vga\INTEL\Intel_945G-G35\249,856 igfxsrvc.exe
20A8-04-14 20:00 C:\WINDOWS\system32\1,298,432 dxdiag.exe
★2008-04-14 20:00 C:\WINDOWS\system32\1,298,432 dxdiag.exe
2008-A4-14 20:00 C:\WINDOWS\system32\dllcache\20,992 help.exe
★2008-04-14 20:00 C:\WINDOWS\system32\dllcache\20,992 help.exe
★2008-04-14 20:00 C:\WINDOWS\system32\wbem\196,608 wmiadap.exe
结束时间: 17:40:12.98
[ Last edited by ZJHJ on 2009-8-13 at 21:47 ]
|
|
2009-8-13 13:04 |
|
|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
『第
10 楼』:
Quote: | Originally posted by ZJHJ at 2009-8-13 13:04:
用批处理比较程序变化,比如系统文件的所有exe、inf、dll、或者是所有*.*文件,日期变化,文件大小变化.或增加了文件,单用fc或简单命令都不会使你很满 ... |
|
是的,不知道兄弟有没有更好的方法。
|
|
2009-8-17 04:26 |
|
|
ZJHJ
高级用户
积分 609
发帖 374
注册 2006-8-2
状态 离线
|
『第
11 楼』:
关键问题是技巧,二个文件的比较(效率)我研究了一年多,网上找的代码,只能适合非常简单的文件比较。二个文件都上万行,就不是容易的事了。因为效率问题只能用FC /L,虽然有缺点,但毕竟第一步就刷掉了99.9% 。关键问题是你要将***** f.txt
,*****L.txt文件分开,找出差异,再合并.用程序名查找排列对比显示。这应该是最佳方案。我在“计算机系统维护”里的“exe、dll、inf 程序快照比较(检查是否被病毒修改)”就是这样写的。
[ Last edited by ZJHJ on 2009-8-17 at 06:26 ]
|
|
2009-8-17 06:06 |
|
|
HUNRYBECKY
银牌会员
积分 1179
发帖 442
注册 2006-9-9
状态 离线
|
『第
12 楼』:
已经找到比较好的方法,使用DIFF或WINDIFF,效率比较快,下面是代码
diff -i %cd%\gtools\sysifl.txt %temp%\myget.txt|findstr /i ">">>%report%
windiff "%cd%\gtools\sysifl.txt" "%temp%\myget.txt" -sx "%temp%\temp.txt" -fr "%temp%\temp.txt"&type "%temp%\temp.txt"|findstr /v /i /c:"--">>%report%
|
|
2009-8-24 03:59 |
|