批处理文件的条件IF函数

时间:2016-05-05 08:24:11

标签: batch-file

首先,这是另一个问题的解决方法,但是为了不使这个问题复杂化,我不会进入原始方法。

现在我正在尝试使用批处理文件:

  1. 阅读文本日志文件
  2. 循环到文件的倒数第二行
  3. 然后进行条件检查以查看最后一个条目是否确认进程已成功完成,或者另一条消息是否表明它没有成功完成。
  4. 根据上面步骤3的结果,返回值0表示pass,1表示fail表示SSIS可以解释结果。
  5. 文本文件的名称作为参数提供给批处理文件。 一切似乎都有效,除了当我试图包含一个IF语句时,它只是没有返回任何结果。

    有人可以告诉我做错了什么吗? - 试图遵循这里的指导:http://ss64.com/nt/if.html但显然没有成功!

    @ECHO off
    setlocal EnableDelayedExpansion
    for /f "delims=" %%x in (%1) do (
        set "previous=!last!"
        set "last=%%x"
    )
    IF !last! == "EXPORT completed successfully" ECHO 1 ELSE ECHO 0 
    

    如果最后一行改为ECHO!last!它正确返回成功完成的字符串EXPORT。我用&尝试了上面的代码没有引号但没有成功。

    任何帮助都会受到赞赏,因为我之前从未使用过批次。

    由于

2 个答案:

答案 0 :(得分:0)

你非常接近!请注意,我在IF和ELSE子句中添加了括号。我还在last附近添加了引号。

最后,请记住批量处理IF ... ELSE周围的空白实际上很重要 - 有关详细信息,请参阅this answer

@ECHO off
setlocal EnableDelayedExpansion
for /f "delims=" %%x in (%1) do (
    set "previous=!last!"
    set "last=%%x"
)
IF "!last!" == "EXPORT completed successfully" (
    ECHO 1
) ELSE (
    ECHO 0 
)

ECHO !last!

答案 1 :(得分:0)

我认为使用set命令在命令行中设置值时,应使用%引用此变量。例如:

@echo off
cls
:loop
rem DO SOMETHING
set /p userinp=Repeat (y,n)?
if "%userinp%" == "y" (goto loop)
pause

此批处理执行某些操作,然后询问用户是否需要使用userinp变量重复该过程。希望这会有所帮助。