Я использую код ниже в моем ftpUpload.bat . Если файл не загружен на FTP-сервер, он должен напечатать «FTP-загрузка не удалась», но я получаю «FTP-загрузка успешно» в обоих случаях. Какие изменения мне нужно сделать в командном файле, чтобы получить правильный вывод

@ECHO OFF    
SET ReturnCode="0"
SET EncryptFilePath=%1
SET ReturnCode=0
::Echo Step4 :  Upload Encrypted file in FTP server is started
    @Echo open 104.213.13.281 21>>C:\Case360_EAR_Tool\%FileName%.txt
    @Echo Dev>>C:\Case360_EAR_Tool\%FileName%.txt
    @Echo MyDev>>C:\Case360_EAR_Tool\%FileName%.txt
    @echo binary>>C:\Case360_EAR_Tool\%FileName%.txt
    @echo cd inbound\development\extracts\yxd0>>C:\Case360_EAR_Tool\%FileName%.txt
    @echo put %EncryptFilePath%>>C:\Case360_EAR_Tool\%FileName%.txt
    @echo quit>>C:\Case360_EAR_Tool\%FileName%.txt
    ftp -i -s:"C:\Case360_EAR_Tool\%FileName%.txt" && (
    echo FTP upload is successful
    DEL C:\Case360_EAR_Tool\%FileName%.txt
    ) || (
    echo FTP upload is failed
    echo ReturnCode="1"
    DEL C:\Case360_EAR_Tool\%FileName%.txt
exit
    )
echo %ReturnCode%
exit

1 ответ1

2

Я не думаю, что есть надежный способ сделать это с Windows ftp.exe .

Он не сообщит результат через код выхода. Всегда возвращает 0, даже при ошибке.

Все, что вы можете сделать, это проанализировать вывод ftp.exe . Но это довольно грязный подход. Обратите внимание, что ftp.exe даже не разделяет ошибки на вывод ошибок, а выводит все на стандартный вывод.


Вам лучше использовать сторонний FTP-клиент.

Например, с помощью сценариев WinSCP вы можете использовать:

@echo off

winscp.com /log=ftp.log /command ^
    "open ftp://user:password@example.com/" ^
    "cd inbound/development/extracts/yxd0" ^ 
    "put %EncryptFilePath%" ^
    "exit" && (
    echo FTP upload is successful
) || (
    echo FTP upload is failed
    exit
)

Где ftp://user:password@example.com/ будет ftp://Dev:MyDev@104.213.13.281/

См. Также « Преобразование сценария Windows FTP в сценарий WinSCP FTP».

(Я автор WinSCP)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .