【问题标题】:Defined variable not outputting in batch script定义的变量不在批处理脚本中输出
【发布时间】:2018-03-07 04:36:38
【问题描述】:

出于资产盘点的目的,我正在尝试批量创建一个脚本,该脚本通过本地 .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)

【问题讨论】:

    标签: batch-file for-loop cmd wmic


    【解决方案1】:

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

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

    @Echo Off
    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 Machine Name: %%A Last Login: %%B)
    Pause
    

    你也可以这样:

    @Echo Off
    For /F "Skip=1 Delims=" %%A In ('
        "WMIC /Node:@Assets.txt ComputerSystem Get Name, UserName"
    ') Do Call :Sub %%A
    Pause
    Exit /B
    
    :Sub
    If Not "%1"=="" Echo Machine Name: %1 Last Login: %2
    

    【讨论】:

    • 非常感谢,这正是我想要做的。还有一件事。我已经编辑了代码以在引发错误时实际显示(因为这就是我知道计算机是否正在尝试连接的离线),但它以一种非常奇怪的格式显示,通常是这样的:Node - COMPUTERNAME ERROR: Description = The RPC server is unavailable 是有一种方法可以编辑它,让它只显示类似“机器名称:NAME 离线。”?
    • 您说您“编辑了代码以在引发错误时实际显示”。除非我弄错了,否则您所做的只是将字符串 Machine NameLast Login 分别更改为 HostUsername 并输出到文本文件。顺便说一句,2^>Nul 抑制来自WMIC 命令的错误,删除它或过滤错误级别可能会为您提供新请求的解决方案。请记住,尽管我的回答已经充分回答了您提出的问题;在回答变成新问题后询问其他内容。
    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 2011-02-10
    • 1970-01-01
    • 2012-01-26
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多