Batch file 已定义变量未在批处理脚本中输出

Batch file 已定义变量未在批处理脚本中输出,batch-file,for-loop,cmd,wmic,Batch File,For Loop,Cmd,Wmic,出于资产盘点的目的,我试图批量创建一个脚本,通过本地.txt文件中的计算机名称运行,获取最后一个登录到计算机的人,并将其输出到一个文本文件,格式为machine Name:Name | last Login:USER 我碰到了一堵墙,搞不清楚发生了什么事。正在正确输出计算机名,但“上次登录”部分不正确。这是我的密码: @echo off for /f %%a in (Assets.txt) do ( for /f %%b in ('wmic.exe /node:"%%a" computersys

出于资产盘点的目的,我试图批量创建一个脚本,通过本地.txt文件中的计算机名称运行,获取最后一个登录到计算机的人,并将其输出到一个文本文件,格式为
machine Name:Name | last Login:USER

我碰到了一堵墙,搞不清楚发生了什么事。正在正确输出计算机名,但“上次登录”部分不正确。这是我的密码:

@echo off
for /f %%a in (Assets.txt) do (
for /f %%b in ('wmic.exe /node:"%%a" computersystem get username') do set lastlogin=%%b
echo Machine Name: %%a Last Login: %lastlogin%)
pause
任何帮助都将不胜感激。多谢各位

更新2

for /f "delims=" %%a in (Assets.txt) do (
    for /f "skip=1 delims=" %%b in (
        'WMIC /Node:"%%a" ComputerSystem Get UserName 2^>nul'
    ) do for %%c in (%%b) do echo Host: %%a Username: %%b >>Usernames.txt)

实际上不需要设置变量,因此不需要启用延迟扩展

您可以将脚本更改为以下内容:

@Echo关闭
对于(Assets.txt)中的/F“Delims=“%%A”Do(
对于/F“Skip=1 Delims=“%%B In(
'WMIC/节点:“%%A”计算机系统获取用户名2^>Nul'
)%%C在(%%B)中的Do回显计算机名称:%%A上次登录:%%B)
暂停
您也可以这样做:

@Echo关闭
对于/F“Skip=1 Delims=“%%A In('
WMIC/Node:@Assets.txt ComputerSystem获取名称、用户名
“)请拨打:Sub%%A
暂停
退出/B
:Sub
如果不是“%1”==“回显计算机名称:%1上次登录:%2

非常感谢,这正是我想要做的。还有一件事。我编辑了代码,以便在抛出错误时实际显示(这就是我如何知道它试图连接的计算机是否处于脱机状态),但它以一种非常奇怪的格式显示,通常是这样的:
Node-COMPUTERNAME ERROR:Description=RPC服务器不可用
是否有办法编辑它,使其只显示类似“Machine Name:Name处于脱机状态”的内容?您说过“编辑代码以在引发错误时实际显示”。除非我弄错了,否则您所做的只是将字符串、
Machine Name
Last Login
分别更改为
Host
Username
,并输出到文本文件。顺便说一句,
2^>Nul
会抑制
WMIC
命令中的错误,删除它或过滤错误级别可能会为您的新请求提供解决方案。请记住,我的回答已经充分回答了你的问题;回答后再问其他问题成为一个新问题。