好的,所以这就是我想要完成的事情的要点。我编写了一个名为 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
答案 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