如何在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