Есть ли способ написать пакетную функцию, чтобы увеличить значение имени реестра? - PullRequest
0 голосов
/ 09 мая 2019

Я пишу командный файл для добавления нового сервера времени в Windows, который подключается к моему серверу (домену) и синхронизирует время устройства с моим сервером.

Но в моих устройствах у некоторых есть 2 сервера времени, а у некоторых более 2 серверов времени.Поэтому я не могу жестко закодировать имя значения в командном файле, и мне нужно найти способ получить имя значения из реестра (автоматически увеличить значение и присвоить его имени значения).

Код, который я написал до сих пор, выглядит следующим образом:

@echo off

reg add HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/DateTime/Servers /v 3 /t REG_SZ /d 13.127.xx.xxx

net stop w32time

w32tm /config /syncfromflags:manual /manualpeerlist:13.127.xx.xxx

net start w32time

w32tm /config /update

w32tm /resync /rediscover

@echo Time Sync Successful

pause

1 Ответ

0 голосов
/ 09 мая 2019

Поскольку вы уже анализируете раздел реестра из своего , вы также можете использовать его для выполнения большинства задач.Это, после обновления значения переменной в строке 3, должно:

  • Оставить ключ без изменений, если сервер уже указан в списке и установлен по умолчанию.
  • Измените сервер на сервер по умолчанию, если он указан в списке, но не установлен по умолчанию.
  • Добавьте сервер, если его нет в списке, и установите его в качестве сервера по умолчанию.
  • Синхронизируйте время, используя сервер по умолчанию.
@Echo Off
SetLocal EnableDelayedExpansion
Set "TSvr=13.127.xx.xxx"
Set "RKey=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers"
Set "#=_=0"
Set "$="
For /F "EOL=HTokens=1-2*" %%A In ('"Reg Query "%RKey%" 2>Nul|Sort"')Do (
    If "%%A"=="(Default)" (Set "DVal=%%C")Else If %%A Gtr !#! Set "#=%%A"
    If "%%C"=="%TSvr%" Set "$=%%A")
If Defined $ (If "%DVal%"=="%$%" (Echo %TSvr% is already the default server.
        GoTo End)Else (Echo %TSvr% is listed but not the currently the default.
        Echo Setting it as the default entry...
        Reg Add "%RKey%" /VE /D %$% /F>Nul 2>&1))Else (Set /A #+=1
    Echo %TSvr% is not listed.
    Echo Adding it and setting it as the default entry...
    Reg Add "%RKey%" /V !#! /D "%TSvr%">Nul 2>&1
    Reg Add "%RKey%" /VE /D !#! /F>Nul 2>&1)
SC Query state= inactive|Find "W32Time">Nul&&(Set "_=1"
    SC Start W32Time>Nul 2>&1)
Echo Synchronising the time using %TSvr%.
W32Tm /ReSync>Nul
If %ErrorLevel%==0 (Echo %TSvr% was added and your time was synchronised to it.
)Else Echo %TSvr% was added but the time was not synchronised.
:End
Pause
If Defined _ SC Stop W32Time>Nul 2>&1
EndLocal
GoTo :EOF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...