BATCH Файл, если else всегда выполняет else, каков правильный синтаксис при использовании do - PullRequest
0 голосов
/ 25 мая 2018

Я проверяю, существует ли сетевой диск, если он копирует текстовые файлы на него, в противном случае я повторяю, что он не существует

Моя проблема заключается в том, что он выполняет оператор if, но также всегда выполняетЕще каждый раз, когда я дважды проверял соответствующие скобки и искал синтаксис, мне интересно, имеет ли это какое-то отношение к 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 Ответ

0 голосов
/ 25 мая 2018

Неверный синтаксис, скобки и 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

потому что она видит первую закрывающую скобку как end оператора 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\"
)

Обратите внимание, что я не говорю, что лучше , так как у вас есть доступ к большему количеству контекста, чем я. Это решение, которое вы должны принятьна основе полной картины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...