Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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 在两个.reg文件之间切换_Batch File_Errorlevel - Fatal编程技术网

Batch file 在两个.reg文件之间切换

Batch file 在两个.reg文件之间切换,batch-file,errorlevel,Batch File,Errorlevel,我正在寻找一种快速简便的方法(我不需要任何错误检查),通过打开批处理文件在两个reg文件之间切换 如果用户运行批处理文件,批处理文件应将注册表文件a合并到注册表。如果用户再次运行,批处理文件应将reg文件B合并到注册表中。如果用户再次运行,文件A将被合并。。。你明白了 一般来说,我认为有两种方法可以做到这一点: 创建某种类型的变量来存储下一个应该运行的reg 检查注册表项值以查看最近合并了哪个注册表项(可能是首选方法) 目前,我正在这样做: REG QUERY "KeyName" /v "Val

我正在寻找一种快速简便的方法(我不需要任何错误检查),通过打开批处理文件在两个reg文件之间切换

如果用户运行批处理文件,批处理文件应将注册表文件a合并到注册表。如果用户再次运行,批处理文件应将reg文件B合并到注册表中。如果用户再次运行,文件A将被合并。。。你明白了

一般来说,我认为有两种方法可以做到这一点:

  • 创建某种类型的变量来存储下一个应该运行的reg
  • 检查注册表项值以查看最近合并了哪个注册表项(可能是首选方法)
  • 目前,我正在这样做:

    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
    

    “出了什么事”是什么意思?我们没有坐在你的键盘旁,从这里看不到你的屏幕。谢谢!我想我更喜欢这个,而不是我目前的解决方案。谢谢你的回答!正如你所知:我接受了另一个答案,因为我觉得它更直观一点。