PDA

Показать полную графическую версию : [решено] Выделить в переменные Имена пользователей


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

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

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

Valek271183
27-11-2018, 14:17
C:\Users на всех компьютерах которые успел проверить
choice.exe в PE работает

megaloman
27-11-2018, 17:15
Valek271183, @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@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" "Все пользователи"




© OSzone.net 2001-2012