Итерировать значения ключа в пакетном режиме - PullRequest
0 голосов
/ 05 июля 2019

Попытка выполнить итерацию по двум таблицам для сопоставления машины с именем пользователя и изменения регистрационного ключа

@echo off
setlocal EnableDelayedExpansion

set host=machine1 machine2
set usernum=1

for %%i in (%host%) do (
    set /a usernum+=1
    if %COMPUTERNAME%==%%i ( set uname=user!usernum! )
)

if defined uname reg add "HKEY_LOCAL_MACHINE\xx\xx\" /t REG_SZ /v User /d %uname% /f

Ранее пробовано, и это будет работать для бесценного толчка, когда машины повторяются, без выкатывания на конкретные машины сконкретные имена

@echo off
setlocal EnableDelayedExpansion

set host=machine1 machine2
set user=user1 user3
set usernum=1

for %%i in (%host%) do (
    set /a usernum+=1
    if %COMPUTERNAME%==%%i ( set uname=user!usernum! )
)

if defined uname reg add "HKEY_LOCAL_MACHINE\xx\xx\" /t REG_SZ /v User /d %uname% /f

Невозможно заставить его пройти первую картографическую машину1 к пользователю1, машине2 к пользователю3 и т.д.Как уже упоминалось, это было хорошо, когда это был machine1 user1 machine2 user2 только что добавили машины в правильной последовательности для номера.Или есть более простой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Попробуйте это:

@echo off
setlocal EnableDelayedExpansion

set host=machine1 machine2
set user=user1 user3

for %%i in (%host%) do (
   if %COMPUTERNAME%==%%i ( for /F %%j in ("!user!") do set uname=%%j )
   for /F "tokens=1*" %%j in ("!user!") do set user=%%k
)

if defined uname reg add "HKEY_LOCAL_MACHINE\xx\xx\" /t REG_SZ /v User /d %uname% /f

Каждый раз, когда хост обрабатывается, пользователь удаляется из его списка. Таким образом, оба значения синхронизируются ...

Еще один более простой метод:

@echo off

for %%i in ("machine1=user1" "machine2=user3") do (
   for /F "tokens=1,2 delims==" %%j in ("%%~i") do (
      if %COMPUTERNAME%==%%j set uname=%%k
   )
)
0 голосов
/ 05 июля 2019
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET "computername=machine3"

SET "uname="
FOR %%a IN (

user1 machine1
user2 machine3

) DO (
 IF DEFINED uname (
  if %COMPUTERNAME%==%%a ECHO reg add "HKEY_LOCAL_MACHINE\xx\xx\" /t REG_SZ /v User /d !uname! /f
  SET "uname="
 ) ELSE (SET "uname=%%a")
)


GOTO :EOF

Как об этом> Для меня он управляет отображением более логичным образом.

Очевидно, что команда reg просто echo ed, а имя хоста принудительно для целей тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...