Board logo

标题: [其他] 求一段识别文件类型的BAT代码,也就是判断后缀名 [打印本页]

作者: 飏有泪    时间: 2013-7-15 17:09     标题: 求一段识别文件类型的BAT代码,也就是判断后缀名

今天无意看到CHKResume这款恢复磁盘碎片的软件,于是研究了一下它的工作原理——也就是识别文件类型
它用的是16进制代码识别,识别的是文件头,有点像“特征码”的味道~~!
于是我就想到用Debug这个工具,可是我对debug不熟悉,也对16进制不熟悉
于是我问问各位大虾,能不能这样做,思路有木有错,Debug能不能这么“玩”?
也想知道怎么做,求代码,求更详细思路!
。。。不知分类有木有错?
附:CHKResume下载地址——http://ishare.iask.sina.com.cn/f/23940612.html
作者: 522235677    时间: 2013-7-15 23:49

批处理识别后缀简单啊。但是你说个软件可能不止这么简单哦
作者: 飏有泪    时间: 2013-7-16 14:13

我是不知道文件后缀名,或者文件后缀名有错误,要判断文件正确的后缀名。代码,有没,老兄?
最好用debug,不要其他第三方。
作者: CrLf    时间: 2013-7-16 20:40

本帖最后由 CrLf 于 2013-7-16 20:46 编辑

一个方案是 ascode,比 debug 通用些:
  1. @echo off
  2. if "%1"=="" goto gethex
  3. if %1%2%3%4==52617221 echo 可能是 RAR 格式
  4. if %1%2%3==FFD8FF echo 可能是 JPG 格式文本
  5. if %1%2%3%4%5==4749463839 echo 可能是 GIF 格式文本
  6. if %1%2==FFFE echo 可能是 Unicode 格式文本
  7. :gethex  
  8. (for /f "delims=" %%a in ('findstr /ib "::gethex" "%~0"') do echo %%~na)>gethex.com
  9. (gethex.com; &echo;)<222.txt | cmd /vc "set /p str=&%0 !str!"
  10. ::gethex\RQPUWP]UZV_BBBB5``PY(E1(E5)E7)E<(E@)EI-
  11. ::gethex\SX3CP< ~v<P}k%ooQRY2AY0@ uP0EPGEB?_]XYZ
  12. ::gethex\020680008KN8740LKN82004M4MJL3L3K7402454N
  13. ::gethex\K40KLM213L007432K408LM213L0J74063L0M7402
  14. ::gethex\NK078JM0N82O00NKN38JM052K104M2NJN815005J
  15. ::gethex\N8110050K440KK01008KLM8KM6LM2158NKL6LM20
  16. ::gethex\80N20O80L23080OJ3J7L0380L207K402LM21L3
复制代码
另一个方案是 ado,用 "cscript /nologo gethex.vbs  要取得的文件  要取得的字节数" 可以取得头部几个字节的 hex,至于比较关键词什么的,就和上面的 bat 大同小异了,gethex.vbs 内容如下:
  1. Const length = 16  '输出时每段的字节数
  2. delim = vbCrLf  '连接连接每段的字符串
  3. Dim var()
  4. ReDim var(0)
  5. id = 0
  6. With CreateObject("ADODB.Stream")
  7. .Type = 1
  8. .Open
  9. .LoadFromFile WScript.Arguments(0)
  10. For i = 1 To WScript.Arguments(1)
  11. h = Hex(AscB(.Read(1)))
  12. If Len(h) = 1 Then h = 0 & h
  13. var(id) = var(id) & h & " "
  14. If (i Mod length) = 0 Then
  15. var(id) = var(id)
  16. id = id+1
  17. ReDim Preserve var(id)
  18. End If
  19. Next
  20. End With
  21. WScript.Echo Join(var,delim)
复制代码

作者: CrLf    时间: 2013-7-16 20:44

本帖最后由 CrLf 于 2013-7-16 20:45 编辑

不想用 com 也不想用 vbs 的话,fc 也可以获得 hex,类似这个帖子:
http://www.bathome.net/viewthread.php?tid=12688
还有这个帖子也可以参考下:
http://www.bathome.net/viewthread.php?tid=15721
作者: wskwfkbdn    时间: 2013-7-17 11:11

不管恢复出来的文件是什么后缀名,或是没有后缀,用EXeinfo工具检测,可对整个文件夹进行检测,功能强大的特征码查询工具称之查壳工具,包括任意有效文件的检测,本人最爱查壳工具之一。
作者: CrLf    时间: 2013-7-17 12:27

回复 6# wskwfkbdn


    试了下,EXeinfo 真不错,谢谢分享~
作者: Python    时间: 2013-7-17 13:11

回复 7# CrLf


    也可以试试FFI(File Format Identifier)
作者: CrLf    时间: 2013-7-17 17:43

回复 8# Python


    好像没找到判断文件格式的功能,是在第三方插件里吗?
作者: wankoilz    时间: 2013-7-18 00:37

楼主似乎是有查找文件特征码然后恢复的意思。
用WinHex吧。可以搜索你所谓的“特征码”,又能直接保存指定扇区数据。
作者: 飏有泪    时间: 2013-8-1 15:29

回复 10# wankoilz


    说不上是特征码,有点像”文件头“那种感觉
作者: 飏有泪    时间: 2013-8-1 15:30

谢谢楼上的各位老大了




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2