运行命令行脚本时,是否可以获取当前用户的名称?操作系统是Windows XP。
答案 0 :(得分:182)
您可以使用用户名变量:%USERNAME%
答案 1 :(得分:77)
<强>用户名:强>
echo %USERNAME%
<强>域名:强>
echo %USERDOMAIN%
您可以通过从命令提示符运行命令set
来获取环境变量的完整列表。
答案 2 :(得分:55)
只需在命令提示符中使用此命令
C:\> whoami
答案 3 :(得分:44)
应该在%USERNAME%
。显然这很容易被欺骗,所以不要依赖它来保证安全。
有用的提示:在命令提示符中键入set
将列出所有环境变量。
答案 4 :(得分:14)
%USERNAME%
是批处理和Windows环境中其他正确答案。
另一种选择是使用 %USERPROFILE%
来获取用户的路径,例如C:\Users\username
。
答案 5 :(得分:4)
总是让我感到烦恼的是Windows没有一些更有用的Unix脚本实用程序,例如who / whoami,sed和AWK。无论如何,如果你想要一些万无一失的东西,请获取Visual Studio Express并编译以下内容:
#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv) {
printf("%s", GetUserName());
}
只需在批处理文件中使用它。
答案 6 :(得分:4)
%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
答案 7 :(得分:3)
我在编写批处理文件时使用此方法进行测试。
echo %userdomain%\%username%
由于如果需要身份验证,您必须以纯文本格式包含密码,因此我只会在完全私密的环境中使用密码,而其他用户无法查看密码或者看到密码的用户不会产生任何后果。
希望这可以帮助别人。
答案 8 :(得分:3)
在大多数情况下,%USERNAME%变量将是您想要的。
echo %USERNAME%
但是,如果您正在运行提升的cmd shell,则%USERNAME%将报告管理员名称而不是您自己的用户名。如果你想知道后者,请运行:
for /f "tokens=2" %u in ('query session ^| findstr /R "^>"') do @echo %u
答案 9 :(得分:1)
答案取决于您使用的是哪种“命令行脚本”语言。
在旧的cmd.exe
命令提示符下或.bat
或.cmd
脚本中,您可以使用以下命令:
%USERNAME%
-仅获取用户名。
%USERDOMAIN%
-获取用户的域。
在PowerShell命令提示符或.ps1
或.psm1
脚本中,可以使用以下命令:
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
-为您提供标准的用户名(例如Domain \ Username)。这也是最安全的方法,因为用户无法像下面的其他$Env
变量一样覆盖它。
$Env:Username
-仅获取用户名。
$Env:UserDomain
-获取用户的域。
$Env:ComputerName
-获取计算机的名称。
答案 10 :(得分:0)
在标准上下文中,每个连接的用户都拥有一个explorer.exe进程:命令[tasklist / V | find“explorer”]返回一行,其中包含explorer.exe进程所有者,并且可以使用改编的正则表达式获得所需的价值。这也可以在Windows 7下完美运行。
在极少数情况下,explorer.exe被另一个程序替换,可以调整查找过滤器以匹配此情况。如果命令返回空行,则很可能没有用户登录。使用Windows 7,还可以运行[query session | find“&gt;”]。
答案 11 :(得分:0)
至于找到最好的BlueBearr响应(当我运行我的批处理脚本与例如SYSTEM权限时)我必须添加一些内容。 因为在我的Windows语言版本(波兰语)行中,“%% a %% b”=“用户名:”得到真正的复杂(它包含我语言中的一些变音字符)我跳过前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
答案 12 :(得分:0)
这是用户名变量和whoami命令之间的主要区别:
C:\Users\user.name>echo %username%
user.name
C:\Users\user.name>whoami
domain\user.name
DOMAIN = bios name of the domain (not fqdn)
答案 13 :(得分:0)
通过powershell(file.ps1) 我使用以下
@page "/cosmos"
@inject TestWebsite.Services.CosmosDbProvider cosmosProvider;
<h3>Cosmos</h3>
@if(_db !=null)
{
<p>Your database is called @_db.DatabaseName</p>
}
@code {
TestWebsite.Services.ICosmosDbService _db;
protected override async Task OnInitializedAsync()
{
// create/get CosmosDbService
_db = await cosmosProvider.CreateAsync();
}
}
它以“域\用户名”格式返回用户名。 如果您只想输入用户名
$username = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
优点是它可与Windows 10 Windows 8 Server 2016一起使用。据我所记得,还与其他操作系统(例如Win7等)(不旧)一起使用。 。是的,您可以简单地使用批处理
$username = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name.Split("\")[1]
答案 14 :(得分:0)
只需在命令提示符下键入whoami
,您将获得当前的用户名。