Пакетный файл FTP пытается ввести пароль/аутентификацию несколько раз, используя цикл ERRORLEVEL

Я не могу попытаться повторно подключиться с другим паролем после сбоя аутентификации. ERRORLEVEL похоже, не работает в моем коде. Я понятия не имею, что происходит не так. Код находится в пакетном файле в Windows 10.

@echo off

echo use USERNAME> ftpcmd.dat
echo PASSWORD>> ftpcmd.dat


ftp -n -s:ftpcmd.dat files.000webhost.com

if %ERRORLEVEL% neq 0 (
   goto TEST
)

:TEST
echo user USERNAME> ftpcmd.dat
echo DIFFERENTPASSWORD>> ftpcmd.dat
echo prompt>>ftpcmd.dat
echo cd Test>>ftpcmd.dat
echo mput FILE PATH>> ftpcmd.dat

ftp -n -s:ftpcmd.dat FTPTHING

person Ahm23    schedule 05.03.2017    source источник
comment
Команда ftp всегда возвращает уровень ошибки 0, независимо от того, что происходит. Вам нужно будет записать выходные данные в файл журнала, а затем проанализировать файлы журнала на наличие ошибок.   -  person Squashman    schedule 05.03.2017
comment
Как я могу это сделать? Пожалуйста, опубликуйте ответ, потому что я новичок в пакетной обработке и понятия не имею, как собирать журналы.   -  person Ahm23    schedule 05.03.2017


Ответы (1)


Windows ftp.exe всегда возвращает 0, несмотря ни на что.

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

Если вы все равно хотите использовать этот подход, см.


Тем не менее, вам лучше использовать какой-нибудь лучший FTP-клиент. Рано или поздно вы все равно столкнетесь с проблемами с ftp.exe, так как он не поддерживает шифрование, пассивный режим или рекурсивные передачи, среди многих других ограничений.

Если вы знакомы с PowerShell, используйте FtpWebRequest или WebClient из сценария Powershell. Здесь есть множество примеров, например загрузка файлов по FTP с помощью PowerShell.


Если нет, используйте какой-нибудь сторонний FTP-клиент с интерфейсом командной строки.

Например, при использовании FTP-клиента WinSCP пакетный файл может выглядеть так:

@echo off
winscp.com /ini=nul /log=script.log /command ^
  "open ftp://USERNAME:[email protected]/" ^
  "put C:\LOCAL\FILE /REMOTE/PATH/" ^
  "exit"

if ERRORLEVEL 1 (
  winscp.com /ini=nul /log=script2.log /command ^
    "open ftp://USERNAME:[email protected]/" ^
    "put C:\LOCAL\FILE /REMOTE/PATH/" ^
    "exit"
)

Рекомендации:

WinSCP также можно использовать из PowerShell, если вам нужна еще более надежная реализация.

(я автор WinSCP)

person Martin Prikryl    schedule 05.03.2017