找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20660|回复: 14

[文件操作] (已解决)如何用bat删除文件的16进制前四个字节

[复制链接]
发表于 2023-4-23 19:23:18 | 显示全部楼层 |阅读模式
本帖最后由 cbbos 于 2023-4-27 12:48 编辑

[img][/img]

如图

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2023-4-23 19:24:37 | 显示全部楼层
本帖最后由 cbbos 于 2023-4-27 11:17 编辑

用bat可以删掉这样前四个字节,然后重新生成一个.png文件吗?(不更改文件名,只需要更改后缀)
发表于 2023-4-23 20:16:32 | 显示全部楼层
这个很难办,因为你这是用专用软件查看的,才能看到16进制码,而你用记事本打开就会发现全是乱码,而cmd只能读取文本,这个估计只能调用外部程序
发表于 2023-4-23 20:25:58 | 显示全部楼层
vbs可不可以?
发表于 2023-4-23 20:51:55 | 显示全部楼层
本帖最后由 czjt1234 于 2023-4-23 20:54 编辑
  1. ' & cls & cscript.exe /nologo /e:vbscript "%~f0" "1.sct" "2.sct" & pause & exit

  2. Set oStream = CreateObject("ADODB.Stream")
  3. oStream.Type = 1    'adTypeBinary
  4. oStream.Mode = 3    'adModeReadWrite
  5. oStream.Open()
  6. With CreateObject("ADODB.Stream")
  7.     .Type = 1    'adTypeBinary
  8.     .Mode = 3    'adModeReadWrite
  9.     .Open()
  10.     .LoadFromFile WScript.Arguments(0)
  11.     .Position = 4
  12.     .CopyTo oStream
  13.     .Close()
  14. End With
  15. oStream.SaveToFile WScript.Arguments(1), 2    'adSaveCreateOverWrite
  16. oStream.Close()
复制代码
发表于 2023-4-23 22:55:06 | 显示全部楼层
本帖最后由 老刘1号 于 2023-4-24 00:02 编辑

好久没写bat了,写个玩玩
仅供娱乐,速度奇慢,不建议使用
如果有bug请自行修复,不要找我,当然如果没有那更好了(x
输入:input.png
输出:new.png
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. (
  4.         for /f "skip=2 delims=" %%. in ('certutil input.png ^| find /v "CertUtil"') do (
  5.                 for /f "tokens=2-17 delims= " %%a in ("%%.") do (
  6.                         if defined prev (
  7.                                 rem 这么写是因为最后一行得做特殊处理(certutil输出格式不标准)
  8.                                 echo !prev!
  9.                         )
  10.                         if not defined t (
  11.                                 rem 对第一行的16个hex,不显示前4个,就相当于丢掉了
  12.                                 set t=啊
  13.                                 rem 前四个hex也就是%%a %%b %%c %%d 扔掉,,
  14.                                 set "prev=%%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p"
  15.                         ) else (
  16.                                 set "prev=%%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p"
  17.                         )
  18.                 )
  19.                 set "lastline=%%."
  20.         )
  21.         rem echo !lastline!
  22. )> newhex.txt
  23. (
  24.         rem 针对最后一行的特殊处理
  25.         rem flag1 -> 读到了第一个非空格的字符
  26.         rem flag2 -> 空格分割的第一个字符串读完了
  27.         :trim
  28.                 set "char=!lastline:~,1!"
  29.                 rem echo !char!
  30.                 rem pause
  31.                 if "!char!" == " " (
  32.                         if "!flag1!" == "yes" set flag2=yes
  33.                         set "lastline=!lastline:~1!"
  34.                 ) else (
  35.                         if "!flag2!" == "yes" goto ok
  36.                         set flag1=yes
  37.                         set "lastline=!lastline:~1!"
  38.                 )
  39.                 goto trim
  40.         :ok
  41.         rem  观察certutil输出,hex部分最长48
  42.         rem echo ll: !lastline!
  43.         rem echo lltrim: !lastline:~,48!
  44.         >>newhex.txt echo !lastline:~,48!
  45. )       
  46. rem > newhex.txt
  47. certutil -decodehex newhex.txt new.png
  48. pause
复制代码
用certutil结合base64做一些处理也可以,不过太麻烦了我懒得写‘
那个newhex.txt是临时文件,运行完了之后可以删了

评分

参与人数 1技术 +1 收起 理由
buyiyang + 1 certutil还能这样用

查看全部评分

 楼主| 发表于 2023-4-27 11:14:23 | 显示全部楼层
回复 6# 老刘1号


   感谢回复。 这个貌似没法使用,输出了txt,但是没png
 楼主| 发表于 2023-4-27 11:15:59 | 显示全部楼层
回复 5# czjt1234


    感谢回复,显示 去头.bat(11, 5) ADODB.Stream: 文件无法被打开。
 楼主| 发表于 2023-4-27 11:17:04 | 显示全部楼层
回复 4# jyswjjgdwtdtj


    你好,只要能做到都可以,bat目前好像没找到合适的方法
发表于 2023-4-27 11:23:29 | 显示全部楼层
"1.sct" "2.sct"
这2个改成原始文件名,和修改后的文件名
 楼主| 发表于 2023-4-27 11:32:44 | 显示全部楼层
回复 10# czjt1234


    这个可以,只是每次都要更改文件名,可以做到文件拖上去自动去掉前四字节,然后重新生成一个.png文件吗?(保持原文件名,只需要更改后缀)
发表于 2023-4-27 12:36:57 | 显示全部楼层
"1.sct" "2.sct"
改成
"%~f1" "2.png"

评分

参与人数 1技术 +1 收起 理由
cbbos + 1 666

查看全部评分

 楼主| 发表于 2023-4-27 12:47:29 | 显示全部楼层
回复 12# czjt1234


    感谢,最终完美代码。
  1. ' & cls & cscript.exe /nologo /e:vbscript "%~f0" "%~f1" "%~n1.png" & pause & exit

  2. Set oStream = CreateObject("ADODB.Stream")
  3. oStream.Type = 1    'adTypeBinary
  4. oStream.Mode = 3    'adModeReadWrite
  5. oStream.Open()
  6. With CreateObject("ADODB.Stream")
  7.     .Type = 1    'adTypeBinary
  8.     .Mode = 3    'adModeReadWrite
  9.     .Open()
  10.     .LoadFromFile WScript.Arguments(0)
  11.     .Position = 4
  12.     .CopyTo oStream
  13.     .Close()
  14. End With
  15. oStream.SaveToFile WScript.Arguments(1), 2    'adSaveCreateOverWrite
  16. oStream.Close()
复制代码
 楼主| 发表于 2023-4-27 17:44:56 | 显示全部楼层
回复 12# czjt1234


     大佬这个批处理只能单个文件拖入,能实现一次拖入多个文件吗?
发表于 2023-4-27 18:36:34 | 显示全部楼层
  1. ' & cls & cscript.exe /nologo /e:vbscript "%~f0" %* & pause & exit

  2. Set oFSO = CreateObject("Scripting.FileSystemObject")
  3. Set oStream = CreateObject("ADODB.Stream")
  4. oStream.Type = 1
  5. oStream.Mode = 3
  6. For Each i In WScript.Arguments
  7.     oStream.Open()
  8.     With CreateObject("ADODB.Stream")
  9.         .Type = 1
  10.         .Mode = 3
  11.         .Open()
  12.         .LoadFromFile i
  13.         .Position = 4
  14.         .CopyTo oStream
  15.         .Close()
  16.     End With
  17.     oStream.SaveToFile oFSO.GetBaseName(i) & ".png", 2
  18.     oStream.Close()
  19.     WScript.Echo oFSO.GetBaseName(i) & ".png"
  20. Next
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 22:28 , Processed in 0.013073 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表