【问题标题】:Error level not changing when file is ran with psexec使用 psexec 运行文件时错误级别未更改
【发布时间】:2016-03-18 16:14:06
【问题描述】:

我有一段代码在服务器上运行和使用 psexec 运行时表现不同。我实际上是想阻止计算机离线,但这不是问题。问题是当我直接在服务器上运行此命令时,errorlevel 变为 1,因为 pc 在线。但是当我使用 psexec 在该服务器上运行具有相同命令的文件时,errorelevel 没有改变,它保持为 0。我在互联网上找不到任何解释。

echo %errorlevel%

ping -n 1 machine | findstr "not" > nul
IF %errorlevel%==0 (
    echo test
)

echo %errorlevel%

pause

【问题讨论】:

    标签: windows batch-file cmd windows-xp psexec


    【解决方案1】:

    您显示的不是命令,而是批处理文件,例如ping_machine.cmd。要从psexec 调用它,命令行类似于psexec \\server cmd /c ping_machine.cmd。如果我猜错了,您现在可能会停止阅读此答案的其余部分(下次发布足够的相关上下文,这样就不必猜测了)。

    问题是cmd /c返回了ping_machine的退出码,但是批处理文件没有显式设置退出码,所以默认返回0。这可以通过以下 2 次运行在 cmd 提示符下进行验证 - 请注意,在批处理文件中,您会看到相同/正确的错误级别,但 cmd /c 返回 0

    C:\etc>ping_machine
    0
    1
    Press any key to continue . . .
    
    C:\etc>echo %errorlevel%
    1
    
    C:\etc>cmd /c ping_machine
    0
    1
    Press any key to continue . . .
    
    C:\etc>echo %errorlevel%
    0
    

    要让cmd /c 的行为符合您的预期(反过来psexec 也是如此),请在批处理文件的末尾添加以下行以返回相应的错误级别(这有效,因为echo 和@987654332 都不是@修改errorlevel,否则你必须将它保存在临时变量中以备后用)。

    exit /b %errorlevel%
    

    【讨论】:

    • 问题是我有批处理文件,我正在使用 pcexec 命令运行。在那个批处理文件中,我有一些代码使用%errorlevel% 进行比较。问题就在于此;当我在本地运行该文件时,%errorlevel% 会相应地发生变化,但是当我在远程计算机上运行此文件时,%errorlevel% 没有变化,它保持为 0。
    • @IGRACH 请发布所涉及的完整 psexec 行和批处理文件。
    【解决方案2】:

    就是这样。当我在本地运行此批处理文件时,错误级别更改为 9009。当我使用 psexec \\computername -f -c pathToFile 时,错误代码保持为 0。

    @echo off
    echo %errorlevel%
    pin 234343
    echo %errorlevel%
    pause
    

    【讨论】:

      猜你喜欢
      • 2015-07-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 1970-01-01
      • 2011-12-13
      相关资源
      最近更新 更多