从命令提示符中,我怎样才能获取当前已登录的域用户的友好显示名称(即“John Doe”而不是“john.doe”)?
从命令提示符中,我怎样才能获取当前已登录的域用户的友好显示名称(即“John Doe”而不是“john.doe”)?
这是我用批处理中的net命令和find命令来巧妙实现它的方法:
set command=net user "%USERNAME%" /domain | FIND /I "Full Name"
FOR /F "tokens=1 delims=" %%A in ('%command%') do SET fullNameText=%%A
set fullName=%fullNameText:Full Name=%
for /f "tokens=* delims= " %%a in ("%fullName%") do set fullName=%%a
第一行将我们想要执行的命令存储在一个变量中。它从环境变量中获取用户名,并将其传递给net user
命令,以及/domain
参数,告诉它从当前域中提取。然后它将该命令的结果,即有关当前用户的大量数据,管道传输到一个查找方法中,该方法将只提取我们想要的属性。找到的结果格式为“Full Name John Doe”。第二行将执行该命令并将结果放入变量fullNameText
中。第三行将删除结果中的“Full Name”部分,并最终得到“ John Doe”。第四行使用for循环将结果中的所有前导空格都删除,最终你会在fullName
变量中得到“John Doe”。for /f "usebackq tokens=2,* delims= " %%a in (`net user "%USERNAME%" /domain ^| find /i "Full Name"`) do set FULLNAME=%%b
for /f "usebackq tokens=2,* delims= " %a in (`net user "%USERNAME%" /domain ^| find /i "Full Name"`) do set FULLNAME=%b
/// 只需将双 %% 更改为 %,即可在CMD中运行/// - kgimpelSET TNAME="net user %USERNAME% /domain| FIND /I "Full Name""
FOR /F "tokens=3,4 delims=, " %%A IN ('%TNAME%') DO SET DNAME=%%B %%A
for /F "tokens=2" %i in ('dsquery user -samid %username% ^| dsget user -L -fn ^| find "fn:"') DO @echo %i
当前被接受的答案有4行代码,但实际上只需要一行就可以实现同样的功能:
for /f "tokens=2*" %n in ('net user "%USERNAME%" /domain^|FINDSTR /C:"Full Name"') do echo "%o"
%n
和%o
更改为%%n
和%%o
。"tokens=2*
表示它只关注第二个标记(分配给%n
)和其后的所有字母(分配给下一个字母:%o
)。delims
是空格,因此我们不需要定义它,但如果需要手动定义,则应如下所示:"tokens=2* delims= "
。因为空格是分隔符,它将忽略所有前导空格。|
)通过脱字符(^
)进行转义,告诉命令处理器最初忽略它。FINDSTR
而不是FIND
,因为(在我的测试中)我发现它是更快的命令,这可能会在您经常使用它时产生影响。如果你喜欢的话,FINDSTR /C:"Full Name"
可以很容易地替换为FIND "Full Name"
。@echo off
:begin
echo 5. Find who is on remote PC right now
echo.
set /p a=
IF %a%==5 (goto whoson)
REM Whos on
:whoson
set /p remotecomputername=Enter computer name to see the current user:
wmic /node:%remotecomputername% computersystem get username
pause
goto begin
希望能对你有所帮助。
net user <username> /domain
,並閱讀“完整名稱”字段即可。从远程命令提示符(我通常使用PSexec.exe建立连接),然后只需键入“query user”即可。
从skeletank简化版本
for /F "tokens=3,4 delims=, " %%A in ('net user "%USERNAME%" /domain ^|findstr /C:"Full Name"') do (set _FullName=%%B.%%A)
这将把Doe,John变成John.Doe