Batch file 在两个.reg文件之间切换
我正在寻找一种快速简便的方法(我不需要任何错误检查),通过打开批处理文件在两个reg文件之间切换 如果用户运行批处理文件,批处理文件应将注册表文件a合并到注册表。如果用户再次运行,批处理文件应将reg文件B合并到注册表中。如果用户再次运行,文件A将被合并。。。你明白了 一般来说,我认为有两种方法可以做到这一点:Batch file 在两个.reg文件之间切换,batch-file,errorlevel,Batch File,Errorlevel,我正在寻找一种快速简便的方法(我不需要任何错误检查),通过打开批处理文件在两个reg文件之间切换 如果用户运行批处理文件,批处理文件应将注册表文件a合并到注册表。如果用户再次运行,批处理文件应将reg文件B合并到注册表中。如果用户再次运行,文件A将被合并。。。你明白了 一般来说,我认为有两种方法可以做到这一点: 创建某种类型的变量来存储下一个应该运行的reg 检查注册表项值以查看最近合并了哪个注册表项(可能是首选方法) 目前,我正在这样做: REG QUERY "KeyName" /v "Val
REG QUERY "KeyName" /v "ValueName" | Find "x"
IF ERRORLEVEL 1 regedit /S file1.reg
IF ERRORLEVEL 0 regedit /S file2.reg
REG查询部分似乎工作正常,但在IF ERRORLEVEL
语句中出现了一些问题。但也许我应该使用一种完全不同的方法
希望得到一些建议。。提前谢谢
编辑
抱歉说得有点含糊:我相信前面的解决方案不起作用,因为当第一个IF
正确时,第二个IF
也会在第一个IF
命令之后。因此,我需要一个IF-ELSE
语句来防止运行第二个IF
我现在提出了这个解决方案,它是有效的:
REG QUERY "KeyName" /v "ValueName" | Find "x
IF ERRORLEVEL 1 (REGEDIT /S "file1.reg") ELSE REGEDIT /S "file2.reg"
我还想知道:将注册表项/值添加到批处理文件中而不是使用单独的.reg文件是否会有所改进?值类型为REG_BINARY和REG_DWORD。我会尝试以下方法:
REG QUERY "KeyName" /v "ValueName" | Find "x"
IF ERRORLEVEL 1 (
regedit /S file1.reg
goto :EOF
)
regedit /S file2.reg
当ERRORLEVEL等于或大于ERRORLEVEL编号(请参见此处:)时,IF条件设置为TRUE,因此第二个IF条件的计算结果始终为TRUE。您可以将值存储在环境变量中
@Echo OFF
:: By Elektro H@cker
Set | FIND "Merged" >NUL && Regedit /S "File_B.reg" || Regedit /S "File_A.reg" && SETX Merged YES >NUL
Pause&Exit
这是相同的代码,但缩进并带有快速解释:
@Echo OFF
:: By Elektro H@cker
REM If it's batfile first launch then I add a value "YES" to a variable and then only merges the File A.
REM If isn't batfile first launch then only merges FILE B
Set | FIND "Merged" >NUL && (
Regedit /S "File_B.reg"
) || Regedit /S "File_A.reg" && (
SETX Merged YES >NUL
)
Pause&Exit
“出了什么事”是什么意思?我们没有坐在你的键盘旁,从这里看不到你的屏幕。谢谢!我想我更喜欢这个,而不是我目前的解决方案。谢谢你的回答!正如你所知:我接受了另一个答案,因为我觉得它更直观一点。