Batch file 十六进制字符串到注册表文件/导入失败 解释
好的,这就是我想要实现的要点。我编写了一个名为str2hex2reg.bat的批处理文件(请参阅下面的批处理脚本),该文件在程序安装期间调用,如下所示:Batch file 十六进制字符串到注册表文件/导入失败 解释,batch-file,Batch File,好的,这就是我想要实现的要点。我编写了一个名为str2hex2reg.bat的批处理文件(请参阅下面的批处理脚本),该文件在程序安装期间调用,如下所示: str2hex2reg.bat C:\Users\%USERNAME%\AppData\Local\Temp\libFile.dll 然后,此批处理文件将此文件路径作为字符串,并将其转换为十六进制,然后将其输出保存到注册表文件中,该文件如下所示: Windows Registry Editor Version 5.00 [HKEY_LOCA
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 Overflovians的同事们(lol)有什么我做得不对的吗?我有什么遗漏或遗漏的吗?有没有更好的方法将此字符串转换为十六进制格式到reg文件中,以便我可以在安装程序中的某个函数完成后导入此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
@echo关闭
setlocal EnableDelayedExpansion
:stringToHex
设置/P“=%1”chr.tmp
对于(chr.tmp)中的%%a,执行fsutil文件createnew zero.tmp%%~Za>NUL
设置“十六进制=”
对于('fc/B chr.tmp zero.tmp')中的/F“skip=1令牌=2”%%a,请设置“hex=!hex!%%a”
del chr.tmp zero.tmp
设置文本=%hex%
设定输出=
对于(0,2500)do中的/L%%I(
呼叫集字母=!文本:~%%I,2!
如果不是“!字母!”==”(
设置输出=!输出!,!字母!
)否则(
后藤完成
)
)
:完成
设置输出=%output:~1999%
设置版本=Windows注册表编辑器版本5.00
设置树=[HKEY\U LOCAL\U MACHINE\SOFTWARE\Company\Program\component\settings]
set key1=“FullPath”=十六进制:%output%
@echo%ver%>import.reg
@回声。>>import.reg
@echo%tree%>>import.reg
@echo%key1%>>import.reg
端部
最后几行更改后:
>"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
我用63号试了一大堆不同的东西。至少我知道了些什么。你是一位绅士和学者,我的朋友!谢谢@LotPings
> 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