从命令提示符获取当前Windows域用户的显示名称

时间:2011-10-18 15:19:16

标签: command-prompt

在命令提示符下,如何获取当前登录的域用户的友好显示名称(即“John Doe”而不是“john.doe”)?

8 个答案:

答案 0 :(得分:10)

使用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参数,以告知它从当前域中提取。然后它将结果从当前用户的一堆数据传递给一个find方法,该方法只会提取我们想要的属性。查找的结果采用“全名John Doe”格式。第二行将执行命令并将结果放入变量fullNameText。第三行将删除结果的“全名”部分,最后是“John Doe”。带有for循环的第四行将从结果中删除所有前导空格,最后在fullName变量中使用“John Doe”。

答案 1 :(得分:4)

这是skeletank's响应的衍生物,对我来说稍微清晰一点......(我尝试skeletank's回复并且它对我的编写方式不起作用,因此我的回答如下。)

SET TNAME="net user %USERNAME% /domain| FIND /I "Full Name""
FOR /F "tokens=3,4 delims=, " %%A IN ('%TNAME%') DO SET DNAME=%%B %%A

然后,您可以在任何需要的地方使用'DNAME',例如使用回声输出或使用'IF'语句进行验证。你可以翻转'%% B'和'%% A'标记来回到姓氏第一个布局。这节省了skeletank's原始响应中使用的额外工作量。

<强>变量
- TNAME =临时名称
- DNAME =显示名称

-Thanks skeletank

答案 2 :(得分:3)

  

一个字符串中的Lectrode答案将是这样的:

for /f "usebackq tokens=2,* delims= " %%a in (`net user "%USERNAME%" /domain ^| find /i "Full Name"`) do set FULLNAME=%%b

答案 3 :(得分:2)

使用dsquery和dsget这应该是一种干净的方式,而不依赖于&#34; Full Name&#34;的输出,这取决于语言,而&#34; fn&#34;似乎适用于不同语言版本的Windows。

for /F "tokens=2" %i in ('dsquery user -samid %username% ^| dsget user -L -fn ^| find "fn:"') DO @echo %i

dsget -L开关提供列出的输出&#34; fn:USER&#34;所以剩下的就是抓住输出中的第二列。 找到&#34; fn:&#34;习惯于摆脱&#34; dsget成功&#34;输出

答案 4 :(得分:2)

接受的答案(在发布时)有4行代码,当你只需要一个代码做同样的事情时:

for /f "tokens=2*" %n in ('net user "%USERNAME%" /domain^|FINDSTR /C:"Full Name"') do echo "%o"

即使全名超过2个部分,这也会有效。适用于Windows工作站“开箱即用”,不需要管理员权限。

注意:在批处理文件中使用时,请务必分别将%n%o更改为%%n%%o

命令说明:

"tokens=2*指定它将注意的唯一标记是第二个标记(分配给%n),以及它之后的所有内容(分配给下一个字母:%o)< / p>

默认delims是空格,因此我们不需要定义它,但如果我们需要手动定义它,它将如下所示:"tokens=2* delims= "。因为空格是分隔符,所以它将忽略所有前导空格。

管道(|)被胡萝卜(^)转义,告诉命令处理器最初忽略它。

我也更喜欢使用FINDSTR而不是FIND,因为(在我的测试中)我发现它是更快的命令,如果你经常使用它会产生影响。如果您愿意,可以使用FINDSTR /C:"Full Name"轻松替换FIND "Full Name"

答案 5 :(得分:0)

我构建了一个批处理文件,通过使用set p和goto选择一个动作来快速完成一些操作。我遗漏了不必要的部分。

@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

我希望它有所帮助。

答案 6 :(得分:0)

如果您希望它供人类使用 - 这意味着您不需要自动解析它,因此您只需 全名 - 您只需在命令中输入net user <username> /domain即可提示,并阅读&#34;全名&#34;字段。

参考:Getting detailed domain user info from the command line

答案 7 :(得分:0)

从远程命令提示符(我通常使用PSexec.exe建立),然后只需输入“query user”

enter image description here

相关问题