【问题标题】:How to check if PSFTP process returns 0 with batch file如何检查 PSFTP 进程是否使用批处理文件返回 0
【发布时间】:2014-06-06 02:59:06
【问题描述】:

我正在编写一个批处理脚本,它从目录中获取文件并使用 psftp 远程复制它们。

这就是发挥所有魔力的那一行:

echo n | psftp.exe user@hostname.com -i id_rsa.ppk -v -b psftp-rules.txt -bc >> c:\log-file.txt

如您所见,psftp.exe 被调用并通过 rsa 密钥进行身份验证。推杆发生在psftp-rules.txt,活动记录在log-file.txt

我需要一个函数来检查返回码,如果有任何失败,将错误写入日志文件然后退出。

我正在寻找的可能是为此返回码设置一个变量。然后我想象一个变量等于 1 的 if 语句来结束脚本并将错误消息回显到日志中。

我看到的问题是,一旦运行上面的行,批处理脚本(如果不涉及)。任何帮助将不胜感激。

【问题讨论】:

    标签: windows batch-file putty return-code


    【解决方案1】:

    检查 psftp 是否设置错误代码

    在函数运行后立即检查%ErrorLevel% 的值。在成功的工作流和失败的工作流中运行它,以验证 ErrorLevel 是否在失败时设置。

    echo %ErrorLevel%
    echo n | psftp.exe user@hostname.com -i id_rsa.ppk -v -b psftp-rules.txt -bc >> c:\log-file.txt
    echo %ErrorLevel%
    

    更新

    将 ErrorLevel 存储在变量中并计算

    echo n | ...
    set "ExitCode=%ErrorLevel%"
    if "%ExitCode%"=="1" echo This is my error message for error 1 > c:\log-file.txt & exit /b %ExitCode%
    

    如果您想捕获所有肯定的 ErrorLevels 并回显相同的消息,请使用以下 if 语句。

    echo n | ...
    if ErrorLevel 1 echo This is my error message for error 1+ > c:\log-file.txt & exit /b %ErrorLevel%
    

    【讨论】:

    • 谢谢大卫。我想知道如果我想让上述函数的返回码成为变量,我需要做什么?理想情况下,我还想为变量做一个 if 语句。例如,如果变量 = 1(错误)退出脚本并将消息回显到日志中。我是 Linux 人,所以请原谅这个问题。谢谢!
    • @NerdyBird 抱歉,直到现在我都错过了你的问题。用示例更新了答案。
    • 小心使用 ErrorLevel 作为环境变量。见blogs.msdn.com/b/oldnewthing/archive/2008/09/26/…
    猜你喜欢
    • 2011-05-25
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2015-07-09
    • 2011-08-09
    相关资源
    最近更新 更多