Переключение между двумя файлами .reg

Я ищу быстрый и простой способ (мне не нужна проверка ошибок) для переключения между двумя reg-файлами, открыв пакетный файл.

Если пользователь запускает пакетный файл, пакетный файл должен объединить reg-файл A с реестром. Если пользователь запустит его снова, пакетный файл должен объединить reg-файл B с реестром. Если пользователь запустит его снова, файл A будет объединен... вы поняли.

В общем, я думаю, что есть два способа сделать это:

  1. Создайте какую-то переменную для хранения того, какой регистр следует запускать следующим.
  2. Проверьте значения разделов реестра, чтобы увидеть, какой регистр был объединен последним (вероятно, предпочтительный метод).

В настоящее время я делаю это:

REG QUERY "KeyName" /v "ValueName" | Find "x"

IF ERRORLEVEL 1 regedit /S file1.reg
IF ERRORLEVEL 0 regedit /S file2.reg

Часть REG QUERY, похоже, работает, но в операторах 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.


person Daan    schedule 27.11.2012    source источник
comment
Что значит что-то идет не так? Мы не сидим за вашей клавиатурой и не можем видеть ваш экран отсюда.   -  person Ken White    schedule 28.11.2012


Ответы (2)


Я бы попробовал это:

REG QUERY "KeyName" /v "ValueName" | Find "x"

IF ERRORLEVEL 1 (
  regedit /S file1.reg
  goto :EOF
)
regedit /S file2.reg

Условие ЕСЛИ устанавливается в значение ИСТИНА, когда значение ERRORLEVEL больше или равно числу ERRORLEVEL (см. здесь: http://support.microsoft.com/kb/39585/en-us), поэтому второе условие IF всегда оценивается как истинное.

person fthiella    schedule 27.11.2012
comment
Спасибо! Я думаю, что предпочитаю это моему текущему решению. - person Daan; 28.11.2012

Вы можете сохранить значение в переменной среды

@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
person ElektroStudios    schedule 28.11.2012
comment
Спасибо за Ваш ответ! Просто чтобы вы знали: я принял другой ответ, потому что нашел его немного более интуитивным. - person Daan; 01.12.2012