none
CMD: Проверка значения переменной реестра во всех пользоват. профилях RRS feed

  • Вопрос

  • Доброго времени суток!

    Хочу проверить значение переменной реестра HKEY_CURRENT_USER\Software\Razdel1\Peremennaya1 во всех профилях

    И если в некотором профиле значение этой переменной не равно "1", то к значению переменной "RESULT" нужно добавить имя пользователя этого профиля.

    Пытаюсь сделать так:[code]set result=ok

     

    for /f "usebackq tokens=3,3* delims==    " %%i in (`reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /v ProfilesDirectory`) do set profiles=%%i

    for /f "usebackq delims==" %%i in (`echo %profiles%`) do set profiles=%%i

    For /F "usebackq tokens=* delims==" %%i in (`DIR /B /AD-S "%profiles%" ^| FINDSTR /V /B /I /C:"All Users"`) DO (

       reg load HKEY_USERS\111 "%profiles%\%%i\NTUSER.DAT"

    Set env=0

    For /F "Tokens=2*" %%j In ('Reg Query "HKEY_USERS\111\Software\Razdel1" /V Peremennaya1') Do (

       For /F "Tokens=1 delims=" %%l In ('echo %%k') do set env=%%l

    )

    echo %env%

    if /i "-%env%" neq "-1" (

       set result=%result%_%%i

       )

       reg unload HKEY_USERS\111

    )

     

    echo %result%

    pause[/code]В итоге к переменной RESULT добавляется только имя профиля последнего по алфавиту, а не того в которм значение не соттветствует.

    Подскажите пожалуйста, что не так делаю?

    Заранее благодарен!

    8 июля 2013 г. 14:29

Ответы

  • Переменные раскрываются один раз в начале выполнения команды. Такой скрипт:
    set var=10
    (
        set var=20
        echo %var%
    )
    echo %var%
    Выведет:
    >set var=10
    
    >(
    set var=20
     echo 10
    )
    10
    
    >echo 20
    20
    Заметьте: первый echo %var% раскрылся в echo 10 до того как была выполнена команда set var=20. Вам нужно использовать отложенное раскрытие переменных:
    setlocal ENABLEDELAYEDEXPANSION
    set var=10
    (
        set var=20
        echo !var!
    )
    echo !var!
    • Помечено в качестве ответа SANIOK_AV 9 июля 2013 г. 11:25
    8 июля 2013 г. 20:46

Все ответы

  • Переменные раскрываются один раз в начале выполнения команды. Такой скрипт:
    set var=10
    (
        set var=20
        echo %var%
    )
    echo %var%
    Выведет:
    >set var=10
    
    >(
    set var=20
     echo 10
    )
    10
    
    >echo 20
    20
    Заметьте: первый echo %var% раскрылся в echo 10 до того как была выполнена команда set var=20. Вам нужно использовать отложенное раскрытие переменных:
    setlocal ENABLEDELAYEDEXPANSION
    set var=10
    (
        set var=20
        echo !var!
    )
    echo !var!
    • Помечено в качестве ответа SANIOK_AV 9 июля 2013 г. 11:25
    8 июля 2013 г. 20:46
  • Спасибо большое!!!
    9 июля 2013 г. 11:25