Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Выделить в переменные Имена пользователей (http://forum.oszone.net/showthread.php?t=337911)

Valek271183 27-11-2018 00:21 2842785

Выделить в переменные Имена пользователей
 
Подскажите возможно ли сделать так, что бы вывести список пользователей из диска C:\Users в переменную, сложность в том, что это надо сделать из WinPE, плюс в том, что в WindowsPE диск с рабочей Windows 7 всегда отображается диском C:\
Сейчас в батнике вручную вписываю имя пользователя простой командой SET /P, но хотелось бы не смотреть каждый раз имена пользователей, и вписывать их вручную, а выбрать из показанного списка, например было бы так:
Выберите пользователя:
Менеджер
Продавец и т.д., то есть перечислен список пользователей из C:\Users, и выбрав вариант с нужным пользователем, его имя записалось в переменную, что бы батник продолжил дальше работать с этим пользователем.
Подскажите, пожалуйста, как это сделать?

Iska 27-11-2018 05:18 2842791

Valek271183, начните с того — зачем это Вам нужно. Ибо имя каталога в C:\Users — далеко не всегда <===> Имя пользователя.

Проверьте, работает ли в WinPE команда choice.exe?

Valek271183 27-11-2018 14:17 2842850

C:\Users на всех компьютерах которые успел проверить
choice.exe в PE работает

megaloman 27-11-2018 17:15 2842878

Valek271183,
Не гарантирую для PE, не Choice
Код:

@Echo Off
cls
        Set "DUsers=C:\Users"
        Set Ext="Public"

        Set /A N=0
        FOR /D %%d IN ("%DUsers%\*.*") DO Call :Names "%%~nd"
        If N==0 Exit /B 1

        :Begin
        2>nul Set /A NUser=%U%
        cls
        Echo ===== Список пользователей
        FOR /L %%i IN (1,1,%N%) DO Call Echo %%i %%N%%i%%
        SET /P i=Выход=Q, Номер пользователя=
       
        If /I "%i%"=="Q" Exit /B
        2>nul Set /A NUser=%i%

        If %NUser% LSS 1 GoTo :Begin
        If %NUser% GTR %N% GoTo :Begin

        Call Set "NUser=%%N%NUser%%%
        Echo %NUser%
pause
GoTo :Eof

:Names
        FOR %%i IN (%Ext%) DO If /I "%%~i"==%1 Exit /B
        Set /A N+=1
        Set "N%N%=%~1"
Exit /B

Не гарантирую для PE, Choice, не более 9 пользователей
Код:

@Echo Off
cls
        Set "DUsers=C:\Users"
        Set Ext="Public"

        Set /A N=0
        Set "Spisok=Q"
        Set "Element=Q=Выход"
        FOR /D %%d IN ("%DUsers%\*.*") DO Call :Names "%%~nd"
        If N==0 Exit /B 1

        Echo ===== Выберите пользователя
        CHOICE /C %Spisok% /M "%Element%"
        If %ErrorLevel% EQU 1 Exit B 0

        Set /A NUser=%ErrorLevel%-1
        Call Set "NUser=%%N%NUser%%%

        Echo "%NUser%"
pause
GoTo :Eof

:Names
        FOR %%i IN (%Ext%) DO If /I "%%~i"==%1 Exit /B
        If %N% EQU 9 Exit /B 1
        Set /A N+=1
        Set "Spisok=%Spisok%%N%"
        Set "Element=%Element% %N%=%~1"
        Set "N%N%=%~1"
Exit /B

Если кроме папок пользователей имеются другие не скрытые и не системные, они будут рассматриваться как папки пользователей.
Может быть сформирован список нерассматриваемых папок в переменной Ext. Сейчас там одна папка:
Set Ext="Public"
Возможно несколько папок:
Set Ext="Public" "All Users" Default "Default User" "Все пользователи"


Время: 01:45.

Время: 01:45.
© OSzone.net 2001-