Answers:
用户名:
echo %USERNAME%
域名:
echo %USERDOMAIN%
您可以通过set
在命令提示符下运行命令来获取环境变量的完整列表。
只需在命令提示符下使用此命令
C:\> whoami
whoami
,我会得到desktop-machine\bballdave025
。通过以下两个部分可以看出:1)echo %USERNAME%
,结果bballdave025
;2)echo %USERDOMAIN%
,结果DESKTOP-MACHINE
。我猜一个人可能说“完整的用户名”可通过echo %USERDOMAIN%\%USERNAME%
(此结果DESKTOP-MACHINE\bballdave025
,匹配whoami
大小写,忽略大小写),甚至通过echo %USERNAME%@%USERDOMAIN%
result来使用bballdave025@DESKTOP-MACHINE
。这完全取决于用户(对我们而言,OP)的需求,即域部分是否重要。
应该在%USERNAME%
。显然,这很容易被欺骗,因此请不要依赖于它的安全性。
有用的提示:set
在命令提示符下键入将列出所有环境变量。
答案取决于您所使用的“命令行脚本”语言。
在旧的cmd.exe
命令提示符或.bat
或.cmd
脚本中,可以使用以下命令:
%USERNAME%
-仅获取用户名。
%USERDOMAIN%
-获取用户的域。
在PowerShell命令提示符或.ps1
或.psm1
脚本中,可以使用以下命令:
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
-为您提供完全限定的用户名(例如Domain \ Username)。这也是最安全的方法,因为它不能像$Env
下面的其他变量一样被用户覆盖。
$Env:Username
-仅获取用户名。
$Env:UserDomain
-获取用户的域。
$Env:ComputerName
-获取计算机的名称。
%USERNAME%将为您获取当前正在运行的进程的用户名。根据您运行批处理文件的方式,此名称不一定与当前用户的名称相同。例如,您可能正在通过计划任务,从服务等运行批处理文件。
这是一种更可靠的方式,通过抓取启动explorer.exe任务的用户名来获取当前登录用户的用户名:
for /f "TOKENS=1,2,*" %%a in ('tasklist /FI "IMAGENAME eq explorer.exe" /FO LIST /V') do if /i "%%a %%b"=="User Name:" set _currdomain_user=%%c
for /f "TOKENS=1,2 DELIMS=\" %%a in ("%_currdomain_user%") do set _currdomain=%%a & set _curruser=%%b
我使用这种方法编写批处理文件进行测试。
echo %userdomain%\%username%
由于如果需要身份验证,您必须在纯文本中包含密码,所以我只会在完全私有的环境中使用它,其他用户无法查看它,或者看到该密码的用户不会承担任何后果。
希望这可以帮助某人。
Windows为何没有一些更有用的Unix小型脚本实用程序,例如who / whoami,sed和AWK,这总是让我感到烦恼。无论如何,如果您希望万无一失,请获取Visual Studio Express并编译以下内容:
#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv) {
printf("%s", GetUserName());
}
只需在批处理文件中使用它即可。
net config Workstation | find "User name"
whoami
从Windows Vista开始可用。
在大多数情况下,%USERNAME%变量将是您想要的。
echo %USERNAME%
但是,如果您正在运行提升的cmd Shell,则%USERNAME%将报告管理员名称,而不是您自己的用户名。如果您想了解后者,请运行:
for /f "tokens=2" %u in ('query session ^| findstr /R "^>"') do @echo %u
在标准情况下,每个连接的用户都拥有一个explorer.exe进程:命令[tasklist / V | find“ explorer”]返回一行,其中包含explorer.exe进程所有者的代码,并带有经过修改的正则表达式,可以获取所需的值。这也可以在Windows 7下完美运行。
在极少数情况下,explorer.exe被另一个程序替换,可以修改查找过滤器以匹配这种情况。如果命令返回空行,则很可能没有用户登录。在Windows 7中,也可以运行[query session | find“>”]。
至于发现BlueBearr响应最好(在我以例如SYSTEM权限运行批处理脚本时),我必须添加一些内容。因为在我的Windows语言版本(波兰语)中,要被“ %% a %% b” ==“ User Name:”捕获的行变得非常复杂(它包含我语言中的某些变音符号),所以我跳过了前7行在8号进行操作。
@for /f "SKIP= 7 TOKENS=3,4 DELIMS=\ " %%G in ('tasklist /FI "IMAGENAME eq explorer.exe" /FO LIST /V') do @IF %%G==%COMPUTERNAME% set _currdomain_user=%%H