Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 十六进制字符串到注册表文件/导入失败 解释_Batch File - Fatal编程技术网

Batch file 十六进制字符串到注册表文件/导入失败 解释

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的批处理文件(请参阅下面的批处理脚本),该文件在程序安装期间调用,如下所示:

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