CMD/BAT - [решено] Выделить в переменные Имена пользователей

Ответить
Аватара пользователя
Valek271183

CMD/BAT - [решено] Выделить в переменные Имена пользователей

Сообщение Valek271183 »

Подскажите возможно ли сделать так, что бы вывести список пользователей из диска C:\Users в переменную, сложность в том, что это надо сделать из WinPE, плюс в том, что в WindowsPE диск с рабочей Windows 7 всегда отображается диском C:\

Сейчас в батнике вручную вписываю имя пользователя простой командой SET /P, но хотелось бы не смотреть каждый раз имена пользователей, и вписывать их вручную, а выбрать из показанного списка, например было бы так:

Выберите пользователя:

Менеджер

Продавец и т.д., то есть перечислен список пользователей из C:\Users, и выбрав вариант с нужным пользователем, его имя записалось в переменную, что бы батник продолжил дальше работать с этим пользователем.

Подскажите, пожалуйста, как это сделать?
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Выделить в переменные Имена пользователей

Сообщение Iska »

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



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

Re: CMD/BAT - [решено] Выделить в переменные Имена пользователей

Сообщение Valek271183 »

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

choice.exe в PE работает
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Выделить в переменные Имена пользователей

Сообщение megaloman »

Valek271183,


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

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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 пользователей

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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" "Все пользователи"
Ответить

Вернуться в «Скриптовые языки администрирования Windows»