Windows 如何将用户名作为变量从命令中提取

Windows 如何将用户名作为变量从命令中提取,windows,batch-file,for-loop,cmd,Windows,Batch File,For Loop,Cmd,我有一个运行USMT scanstate的脚本,然后是另一个用于loadstate的脚本。我们正准备用一堆计算机来替换网络上最旧的计算机。 我想在PDQ Deploy中使用这个脚本/批处理/代码,这样我就可以列出我们要更换的计算机,然后在我交换它们之前对它们运行PDQ包,这样所有的东西都会尽快备份,并同时在所有计算机上运行,而不是单独在每台计算机上运行。我无法执行%username%,因为它只会返回运行该命令的PDQ帐户的数据,并且我无法将其设置为以登录用户身份运行,因为他们没有足够的权限运行必

我有一个运行USMT scanstate的脚本,然后是另一个用于loadstate的脚本。我们正准备用一堆计算机来替换网络上最旧的计算机。 我想在PDQ Deploy中使用这个脚本/批处理/代码,这样我就可以列出我们要更换的计算机,然后在我交换它们之前对它们运行PDQ包,这样所有的东西都会尽快备份,并同时在所有计算机上运行,而不是单独在每台计算机上运行。我无法执行%username%,因为它只会返回运行该命令的PDQ帐户的数据,并且我无法将其设置为以登录用户身份运行,因为他们没有足够的权限运行必要的命令

我尝试过使用代币和Delims进行修补,但我尝试的似乎都不管用,我确信我的语法错了

我正在使用此命令,但并不反对可能产生相同结果的不同命令:

query user /server:%computername%
它输出以下内容(用户名更改为“***”):

我想把用户名部分下的内容作为变量

我想使用FOR/F命令,类似于:

for /f "tokens=2*" %%a in ('net user "%Username%" /domain ^| find /i "Full Name"') do set DisplayName=%%b
当然,这给了我他们的名字而不是用户名

for /f %%a in (`query user /server:%computername%`) do set "uname=%%a"
echo User=%uname%
如果我把你的问题写对了,应该会得到想要的结果

要在单个倒逗号内运行的查询,从
query…
abd读取每行输出,第一个标记由
for
分配给
%%a
,然后由
set
分配给变量
uname
,因此最后一行输出是用于传递结果的。如果要使用
delims=v“
,则token1是第一个
v
之前的字符串,不考虑行中任何前导的
v

此代码使用默认的“tokens=
delims
作为标准分隔符字符集,空格是其成员。您可以使用
“tokens=1 delims=“`对于相同的结果,需要行中的第一个标记,其中使用的分隔符只是空格字符


如果要提取
控制台
,则在本例中为
令牌=2

FWIW,Qwinsta还将在控制台上为您提供用户的用户名

 @(
   SetLocal
   Echo Off
 )

 FOR /F "Tokens=2" %%A IN ('
   QWinSta ^|Find /I "Console"
 ')  Do (
   SET "_UN=%%A"
 )

系统上的用户列表可通过以下方式生成:

(Get-CimInstance -ClassName Win32_SystemUsers).PartComponent.name
如果必须从cmd.exe运行:

@ECHO OFF
FOR /F %%A IN ('powershell -NoLogo -NoProfile -Command ^
    "(Get-CimInstance -ClassName Win32_SystemUsers).PartComponent.Name"') DO (
        ECHO user is %%A
    )

如何将用户名与会话名分开?按空格还是按制表符?
查询
命令行的输出是否为固定宽度?您可能会注意到,在这里提取用户名并不是那么简单,特别是当它本身包含空格时(我认为这不推荐,但可能);所以我会检查
query
是否支持其他输出格式,这使得提取用户名更容易…我刚刚发现用户名中允许空格;请参阅本文:。这可能会引起兴趣。Q/a选项卡上有一条关于处理用户名中的空格字符的注释。但是,它似乎只处理一(1)个空格字符。看起来它不会处理用户名中的两(2)个连续空格字符。当然,我不知道为什么有人会在用户名中加一(1)个空格。@W_5678-这些答案对你有用吗?
@ECHO OFF
FOR /F %%A IN ('powershell -NoLogo -NoProfile -Command ^
    "(Get-CimInstance -ClassName Win32_SystemUsers).PartComponent.Name"') DO (
        ECHO user is %%A
    )