WMI C ComputerSystem Get UserName
@echo off
setlocal
rem Get logon username without the leading "computername\" string.
set "user="
for /f "skip=1 tokens=1,* delims=\" %%A in (
'wmic computersystem get username ^|findstr /r /v "^$"'
) do for %%C in (%%~B) do if not defined user set "user=%%~C"
echo "%user%"
pause
Использование опции for /f
skip=1
, поскольку 1-я строка - это заголовок UserName
, который не нужен. Разделите на \
, так как значение будет похоже на computername\username
и получите остаток во 2-м токене. Трубопровод к findstr
, чтобы игнорировать пустые строки. 2-е for
l oop получит первое значение, свободное от пробельных символов.
Piping wmic
выводит к powershell
, чтобы очистить выходные тесты лучше, чем piping к findstr
, и использование 2-й for
l oop не требуется.
@echo off
setlocal
rem Get logon username without the leading "computername\" string.
set "user="
for /f "skip=1 tokens=1,* delims=\" %%A in ('
wmic computersystem get username ^|
powershell -noprofile -command "$input.trim()"
') do set "user=%%~B"
echo "%user%"
pause
Используйте command /?
для получения дополнительной помощи. Большинство команд в коде отображают справку с аргументом /?
в командной строке.
Запрос псевдонима пользователя QUser
@echo off
setlocal
rem Get logon username.
set "user="
for /f %%A in ('quser^|findstr /b /c:">"') do set "user=%%~A"
if defined user if "%user:~0,1%" == ">" set "user=%user:~1%"
echo "%user%"
pause
Ведущий >
в quser
( псевдоним для query user
) указывает на текущее имя пользователя, а не администратора.
При необходимости используйте %user%
вместо %username%
.
Примечания:
Из-за for /f
l oop, получающего имя пользователя из опции по умолчанию token=1
, если имя пользователя содержит пробел или табуляцию, тогда будут получены только символы, предшествующие пробелу или вкладка.
В 64-разрядной ОС quser.exe
существует в System32
, а не в SysWOW64
. 32-разрядный cmd.exe
в 64-разрядной ОС может не распознаваться как команда.
Ссылки: