如何在Windows环境中find当前用户?

运行命令行脚本时,是否可以获取当前用户的名称? 操作系统是Windows XP。

您可以使用用户名variables: %USERNAME%

用户名:

 echo %USERNAME% 

域名:

 echo %USERDOMAIN% 

您可以通过从命令提示符处运行命令set来获得环境variables的完整列表。

只需在命令提示符下使用这个命令:

 C:\> whoami 

它应该在%USERNAME% 。 很明显,这可能很容易被欺骗,所以不要依赖它来保证安全。

有用的提示:在命令提示符下键入的set将会列出所有的环境variables。

%USERNAME%是批处理和Windows环境中的其他正确答案。

另一个select是使用%USERPROFILE%获取用户的path,如C:\Users\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()); } 

只要在batch file中使用它。

%USERNAME%会为您提供当前正在运行的进程的用户名。 根据您如何运行batch file,这不一定与当前用户的名称相同。 例如,您可能正在通过计划任务,服务等运行batch file。

这是通过刮取启动explorer.exe任务的用户的名称获取当前login用户的用户名的更可靠的方法:

 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 

我使用这种方法写入batch file进行testing。

 echo %userdomain%\%username% 

因为如果需要validation,您必须以纯文本forms包含密码,所以我将只在完全私密的环境中使用它,其他用户无法查看密码,或者如果用户看到密码将不会产生任何后果。

希望这可以帮助别人。

在大多数情况下,%USERNAME%variables将是你想要的。

 echo %USERNAME% 

但是,如果您正在运行提升的cmd shell,则%USERNAME%将报告pipe理员名称而不是您自己的用户名。 如果你想知道后者,运行:

 for /f "tokens=2" %u in ('query session ^| findstr /R "^>"') do @echo %u 

在标准上下文中,每个连接的用户都拥有一个explorer.exe进程:命令[tasklist / V | find“explorer”]返回一个包含explorer.exe进程所有者的行,使用修改后的正则expression式可以获得所需的值。 这也运行在Windows 7下完美。

在极less数情况下,explorer.exe被另一个程序取代,查找filter可以适应这种情况。 如果该命令返回一个空行,则很可能没有用户login。 在Windows 7中,也可以运行[查询会话|查找“>”]。

至于发现BlueBearr响应最好(而我,我运行我的批处理脚本与例如系统权限),我不得不添加一些东西。 因为在我的Windows语言版本(波兰语)行中被“%% a %% b”==“User Name:”捕获的行得到了非常复杂的结果(它包含我的语言中的一些变音符号),所以我跳过前7行八号营运。

 @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