在命令提示符下,如何获取当前登录的域用户的友好显示名称(即“John Doe”而不是“john.doe”)?
答案 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;字段。
答案 7 :(得分:0)
从远程命令提示符(我通常使用PSexec.exe建立),然后只需输入“query user”