[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [分享]批处理调用DEBUG生成文件(图片)

有人问我,如何用DEBUG生成自己想要的图片,在这里我就分享一下。
其实生成任意静态文件都可以用这种方法,但是不能超过64K大小,但可执行文件可能会有问题。

先描叙一下文件是什么:
文件就是一堆2进制数据,然而批处理一般是无法读取二进制的,用DEBUG可以(其实显示的是16进制)查看内存映像,这些内存数据其实就是文件本身二进制的内容。
那么我们要生成自己想要的文件:
第一步必须知道该文件的16进制内容,把这些内容存在一个文件里。
第二步是通过DEBUG,将保存的16进制内容写入内存,然后生成文件。

一。
我们来做如何得到文件的内存映像,以一张19K的图片为例。
  1. @echo off&SETLOCAL ENABLEDELAYEDEXPANSION
  2. set "file=1.jpg"
  3. ::第一步:得到文件的字节数,你可以用dir,或者FOR来获得。
  4. for %%i in (!file!) do set /a "size=%%~zi + 256"
  5. if !size! gtr 65536 (echo 文件太大!&goto :eof)
  6. ::第二步:换算成16进制!1.jpg大小为19730,换算成16进制4d12,因为文件都是从0100(10进制256)开始,所以最终地址应该是19730+256=4e12。
  7. set f=0123456789ABCDEF
  8. :loop
  9. set /a mod = %size% %% 16
  10. set /a size /=16
  11. set en=%mod% %en%
  12. if not %size% lss 1 (goto loop)
  13. set "size="
  14. for %%i in (%en%) do (set "size=!size!!f:~%%i,1!")
  15. ::第三步:取得图片0-4e12地址段的内存数据存到CS.TXT。
  16. echo exit|cmd /kprompt d100 !size! $_q$_|debug %file%>cs.txt
  17. ::第四步:cs.txt需要处理掉无用的部分,改成"e 内存地址 16个字节数据",含debug命令的bat。代码如下
  18. >newcs.bat  echo more +4 newcs.bat^|debug ^>nul
  19. >>newcs.bat echo ren newfile.tmp new.jpg
  20. >>newcs.bat echo start new.jpg
  21. >>newcs.bat echo goto :eof
  22. for /f "skip=3 tokens=2-18 delims=:- " %%a in (cs.txt) do (
  23.     set "str=e %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p %%q"
  24.     set str=!str:.=!
  25.     echo !str!>>newcs.bat
  26. )
  27. ::设置内存起始-终止地址。
  28. echo rbx>>newcs.bat
  29. echo 100>>newcs.bat
  30. echo rcx>>newcs.bat
  31. echo !size!>>newcs.bat
  32. echo n newfile.tmp>>newcs.bat
  33. echo w>>newcs.bat
  34. echo q>>newcs.bat
  35. echo,>>newcs.bat
  36. ::第五步:生成图片!
  37. del cs.txt
  38. start /b newcs.bat
复制代码
修正了一些错误,生成的newcs.bat 直接运行,即可生成图片(文件)。

前4步是用来生成。

以后只需要“newcs.txt” + 第五步命令,即可得到图片了。

TOP

这个太强大了。学习一下。。

TOP

TOP

原来已经有这类代码了....
不过看了下,基本是用VBS来读取文件2进制内容的。我采用debug D命令。
COPY /b 的方式的确可以合并文件,不过纯批处理怎么分割,并且得到超过64K的2进制内容就不清楚了。

其实这只起到掩人耳目的作用,实际上这个BAT比要转换的文件本身要大的多。

TOP

支持一下,希望可以学到很多东西!!!谢谢分享

TOP

返回列表