Hex文件/导入失败的字符串

时间:2017-09-13 20:27:54

标签: batch-file

说明

好的,所以这就是我想要完成的事情的要点。我编写了一个名为 str2hex2reg.bat 的批处理文件(请参阅下面的批处理脚本),该文件在安装程序时调用,如下所示:

str2hex2reg.bat C:\Users\%USERNAME%\AppData\Local\Temp\libFile.dll

然后,此批处理文件将此文件路径作为字符串并将其转换为十六进制,然后将其输出保存到注册表文件中,该文件将如下所示:

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Company\Program\component\settings] 
"FullPath"=hex:43,3A,5C,55,73,65,72,73,5C,44,65,76,69,6E,5C,41,70,70,44,61,74,61,5C,4C,6F,63,61,6C,5C,54,65,6D,70,5C,6C,69,62,46,69,6C,65,2E,64,6C,6C 

我很高兴我把这个批处理文件编写成这样的功能,直到这一点正常工作。

问题

好的,这就是我遇到问题的地方。键FullPath具有转换为十六进制输出的字符串,当您打开reg文件时,一切看起来都是正确的;但是,我知道FullPath密钥需要它的值如下所示:

[HKEY_LOCAL_MACHINE\SOFTWARE\Company\Program\component\settings] 
"FullPath"=hex:43,3A,5C,55,73,65,72,73,5C,44,65,76,69,6E,5C,41,\
70,70,44,61,74,61,5C,4C,6F,63,61,6C,5C,54,65,6D,70,5C,6C,69,62,\
46,69,6C,65,2E,64,6C,6C 

我尝试过无数次试图在这么多字符之后插入“\”但无济于事。我尝试了以下命令:

reg add "%tree%" /v FullPath /t REG_BINARY /d %hex%

我在批处理脚本的下半部分之前添加了它,它只获取最终转换的十六进制字符串,并且每两个字符添加一个“,”。不情愿地,尝试使用reg将值直接添加到注册表中是出于任何原因而无法正常工作。

问题

所以现在我在经历了无数个挫折之后就崩溃了;我问你的伙伴 Stack Overflowians (lol)有什么东西我做得不对吗?有什么东西我会遗漏或丢失吗?有没有更好的方法将此字符串转换为十六进制文件,以便在安装程序中的某个函数完成后导入此reg文件?

批处理脚本

str2hex2reg.bat

@echo off
setlocal EnableDelayedExpansion

:stringToHex
set /P "=%~1" < NUL > chr.tmp

for %%a in (chr.tmp) do fsutil file createnew zero.tmp %%~Za > NUL

set "hex="
for /F "skip=1 tokens=2" %%a in ('fc /B chr.tmp zero.tmp') do set "hex=!hex!%%a"

del chr.tmp zero.tmp

set Text=%hex%
set output=

for /L %%I in (0,2,500) do (
    call set Letter=!Text:~%%I,2!
    if not "!Letter!" == "" (
        set output=!output!,!Letter!
    ) else (
        goto finished
    )
)

:finished
set output=%output:~1,999%
set ver=Windows Registry Editor Version 5.00
set tree=[HKEY_LOCAL_MACHINE\SOFTWARE\Company\Program\component\settings]
set key1="FullPath"=hex:%output%

@echo %ver% > import.reg
@echo. >> import.reg
@echo %tree% >> import.reg
@echo %key1% >> import.reg

endlocal

1 个答案:

答案 0 :(得分:1)

str2hex2reg.bat C:\Users\Devin\AppData\Local\Temp\libFile.dll

这改变了最后一行:

 >"import.reg" echo %ver% 
>>"import.reg" echo.
>>"import.reg" echo %tree%
:loop
If "%key1:~63%" neq "" (
>>"import.reg" echo %key1:~0,63%\
set "key1=!Key1:~63!"
Goto :loop
)
>>"import.reg" echo %key1%

将输出:

> type import.reg
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Company\Program\component\settings]
"FullPath"=hex:43,3A,5C,55,73,65,72,73,5C,44,65,76,69,6E,5C,41,\
70,70,44,61,74,61,5C,4C,6F,63,61,6C,5C,54,65,6D,70,5C,6C,69,62,\
46,69,6C,65,2E,64,6C,6C