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

[文件操作] [已解决]批处理调用certutil输出图片求改进

本帖最后由 SQYSQYSQY 于 2019-1-6 15:44 编辑

偶然间制作了一个输出图片的程序,但要按14次回车也不免让人烦。求改进。
注:第三行原来还有set 1=……,既然问题解决了,就省略那部分
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. IF EXIST 一朵白云.txt del /q 一朵白云.txt >nul
  4. for /l %%i in (1 1 14) do (
  5. set /a "a=14-%%i+1"
  6. echo 请按回车继续:(还需按!a!次)
  7. set /p=!%%i!>>一朵白云.txt
  8. if "%%i"=="1" attrib +h 一朵白云.txt >nul
  9. )
  10. certutil -decodehex 一朵白云.txt 一朵白云.jpg >nul
  11. attrib -h 一朵白云.txt >nul
  12. del /q 一朵白云.txt >nul
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 SQYSQYSQY 于 2019-1-6 16:10 编辑

回复 3# ivor


    谢谢,是能用,但这只是针对小图片。图片达到8192b(8kb)时,这种方法就不行了。因为批处理有限制,一次只能输出不高于那个限制的字符。
可对比:写入批处理文件中用了十几行,输出后只有10行,转换为图片,只有上半部分。
很明显少了一部分.

TOP

本帖最后由 SQYSQYSQY 于 2019-1-6 14:49 编辑

回复 5# 523066680


    思路没错,就是发现n的值始终为一。稍微改一下就可以了,谢谢。果然支持大数据。
  1. @echo off
  2. IF exist 文件 del /q 文件 >nul
  3. IF exist avatar.jpg del /q avatar.gif >nul
  4. type "%0"|more +8>文件
  5. certutil -decodehex 文件 avatar.gif
  6. del /q 文件 >nul
  7. exit /b
  8. :img_raw_data
  9. 474946383961020202028000003F22EE0000002C00000000010001000002024401003B
复制代码
(上面代码输出514像素*514像素的图片)
代码最后一行的数据果然没有大小限制。谢谢了

偶然发现还可以更改颜色。代码中数据“3F22EE”可换为不同颜色。
红:FF0000
绿:00FF00
蓝:0000FF
紫:FF00FF(红+蓝)
橙:FFFF00(红+绿)
黑:000000
白:FFFFFF
……

TOP

本帖最后由 SQYSQYSQY 于 2019-1-6 14:50 编辑

回复 5# 523066680


    我知道问题出在哪了:
%0的返回值是带引号的文件名。而for默认会把带引号的视为字符串。
应改为:
  1. @echo off
  2. set /a "n=0"
  3. set "a=%0"
  4. for /f "tokens=*" %%a in (%a:~1,-1%) do (
  5. set /a "n+=1"
  6. if "%%a"==":img_raw_data" goto export
  7. )
  8. :export
  9. if exist 文件 del /q 文件 >nul
  10. if exist avatar.jpg del /q avatar.gif >nul
  11. type "%0"|more +%n%>文件
  12. certutil -decodehex 文件 avatar.gif
  13. del /q 文件 >nul
  14. exit /b
  15. :img_raw_data
  16. 47494638396102020202800000CC11CC0000002C00000000010001000002024401003B
复制代码
才发现这样有缺陷。不如改为:
  1. @echo off
  2. set /a "n=0"
  3. for /f "usebackq" %%a in (%0) do (
  4. set /a "n+=1"
  5. if "%%a"==":img_raw_data" goto export
  6. )
  7. :export
  8. if exist 文件 del /q 文件 >nul
  9. if exist avatar.jpg del /q avatar.gif >nul
  10. type "%0"|more +%n%>文件
  11. certutil -decodehex 文件 avatar.gif
  12. del /q 文件 >nul
  13. exit /b
  14. :img_raw_data
  15. 47494638396102020202800000FFCC220000002C00000000010001000002024401003B
复制代码
但好像仍不支持文件名有&或^等特殊字符

TOP

返回列表