bugfix> batch-file > 投稿

テキストファイルをコピーする場合、ネットワークドライブが存在するかどうかを確認します。存在しない場合は、エコーします。

私の問題は、ifを実行するだけでなく、常にelseを実行することです 一致する角かっこをダブルチェックして構文を検索しましたが、 do と関係があるのか​​疑問に思っています

以下のコードをご覧ください

@echo off
set LOGFILE=inv.filie.log
call :LOG >> %LOGFILE%
exit /B
:LOG
E:
echo.
echo *** Date: %DATE:/=-%  Time:%TIME::=-% *** 
echo.

CD "E:\Ftp\Clients\OUT_TEST\INV\"
echo.
echo.
echo Moving Files to Test:
For %%G in (*.txt) do ( 
    if exist z:\ (
        COPY /Y "%%G" "Z:\Outgoing\" 
        MOVE /Y "%%G" "E:\Ftp\Clients\OUT_TEST\INV\Archive\"
    )
    else (
        echo Direcotry Z:\ for test is offline
    )
)
echo.
echo.
echo *** Task complete ***

そして、inv.file.logの出力は

*** Date: 2018-05-25  Time: 8-11-53.89 *** 
Moving Files to Test AS2:
        1 file(s) copied.
        1 file(s) moved.
Direcotry Z:\ for test is offline

*** Task complete ***

上記でわかるように、それは常に行 Direcotry Z:\ for test is offline をエコーし​​ます

どんな助けも感謝します

回答 1 件
  • これは有効な構文ではありません。括弧と else  同じ行になければなりません。

    次のスクリプト:

    @echo off
    if exist c:\ (
        echo if true
    )
    else (
        echo if false
    )
    
    

    生成します:

    if true
    'else' is not recognized as an internal or external command,
    operable program or batch file.
    if false
    
    

    なぜなら、最初の閉じ括弧が終わり  if の  ステートメント。

    よく分かりませんなぜ  2>nul: でスクリプトを呼び出さない限り、エラーは表示されません。  -これによりエラーが破棄され、次のように表示されます。

    if true
    if false
    
    

    いずれにせよ、正しい これを行う方法は、 if をフォーマットすることです  ステートメントを正しく。あなたの場合、それは次のようになります:

    for %%g in (*.txt) do ( 
        if exist z:\ (
            copy /y "%%g" "z:\outgoing\" 
            move /y "%%g" "e:\ftp\clients\out_test\inv\archive\"
        ) else (
            echo Directory z:\ for test is offline.
        )
    )
    
    

    あなたは出来るたぶん また、それを改善するじゃない  z: の存在の確認  すべての単一ファイルに対して。あなたはこれがよりうまくいくことがわかるかもしれません:

    if not exist z:\ (
        echo Directory z:\ for test is offline.
    ) else (
        copy /y *.txt "z:\outgoing\" 
        move /y *.txt "e:\ftp\clients\out_test\inv\archive\"
    )
    
    

    私はそれを言っていないことに注意してください あなたは私よりも多くのコンテキストにアクセスできるため、より良いです。これは、全体像に基づいて下すべき決定です。

あなたの答え