2016-05-05 7 views
1

まず、これは別の問題を回避するための作業ですが、この質問を複雑にしないために、私は元のアプローチには触れません。今、私はバッチファイルを使用しようとしていますバッチファイルの条件付きIF関数

:そのファイル

  • の最後から二番目のラインに至るまでテキストログファイルを読む

    1. ループがどうかを確認するために、条件付きチェックを行います最後のエントリは、プロセスが正常に完了したことの確認、または完了していないことを示す別のメッセージでした。
    2. 上記の手順3の結果に基づいて、SSISが結果を解釈できるように、パスには0を、失敗には1を返します。

    テキストファイルの名前は、パラメータとしてバッチファイルに入力されます。 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が正常に完了した文字列を正しく返します。私は&と上記のコードを引用符なしで試みましたが、成功しませんでした。

    以前はバッチを使用したことがないので、助けてください。

    ありがとうございました

  • +0

    'IF!last!'を 'IF"!last! "'に置き換えてください( '=='の前後のbith部分は、 '' "を含めて比較します) ECHO 1'(コマンドインタープリタが 'else'キーワードを確認する場所を知っているように)、それは... – aschipfl

    答えて

    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! 
    
    +0

    ありがとう、非常に役に立ち、扱います:) – user2916488

    0

    私はあなたがsetコマンドを使用してコマンドラインに値を設定するとき、あなたは%を使用して、この変数を参照する必要があることだと思います。たとえば:

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

    このバッチは、何かをして、手順はuserinp変数を使用して繰り返す必要がある場合に、ユーザーに尋ねます。お役に立てれば。

    +0

    %1はコマンドラインからパラメータを参照しています。 :) – user2916488