Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Обработать статус загрузки на FTP (http://forum.oszone.net/showthread.php?t=349015)

pedrosoft 15-06-2021 16:55 2960329

Обработать статус загрузки на FTP
 
Вложений: 1
Добрый день.

Прошу в помощи в написания условия удаления файла только в том случае, что получен положительный ответ от FTP сервера.
Код:

@echo off

set localdir=D:\test
set ftphost=ftp.test.org
set ftpuser=login
set ftppass=password
set ftpdir=test

setlocal enableDelayedExpansion
for /F %%x in ('dir /B/D %localdir%') do (
  set FILENAME=%localdir%\%%x
  curl -v -T !FILENAME! ftp://%ftphost%/%ftpdir%/ --user %ftpuser%:%ftppass%
  если получен ответ 226 Transfer complete = удалить исходный файл, иначе не удалять
)


Elven 15-06-2021 17:31 2960332

Сомнительно, учитывая что это cmd, но можно попробовать так:

Код:

  curl -v -T !FILENAME! ftp://%ftphost%/%ftpdir%/ --user %ftpuser%:%ftppass% | findstr /L "226 Transfer complete" && (
echo !FILENAME! OK
) || (
echo !FILENAME! KO
)

А зачем в ftp колупаться curl'ом? Есть виндовый cmd'шный клиент (хреновенький, если его не поправили, но вполне себе рабочий), ну и через пошик вроде как тоже можно.

pedrosoft 15-06-2021 19:43 2960339

Elven, такая конструкция не подходит, curl воспринимает продолжение строки | findstr /L "226 Transfer complete" && ( -- воспринимает как продолжение команд и вылетает с ошибкой.

greg zakharov 15-06-2021 20:06 2960343

Цитата:

Цитата Elven
А зачем в ftp колупаться curl'ом? Есть виндовый cmd'шный клиент

В десятке (je te demande de me pardonner, не скажу точно с какой именно версии) curl является штатным средством командной строки.

pedrosoft, получать код статуса через трассировку (ключ -v) - моветон. Ибо для этих целей есть специальные переменные curl. Например:
Код:

curl -Lw "%{http_code}" -so nul -I https://ftp.mozilla.org/pub/
Это, правда, если ftp виртуальный - через https, ибо от протокола ftp многие отказываются в виду его небезопасности. Не буду ничего утверждать, но вроде бы в Microsoft также выпилили из curl поддержку сего. Если всё же ошибаюсь, а также -v предпочтительней, должно быть примерно так:
Код:

for /f "tokens=2" %%i in (
  'curl -sv ftp://ftp.stuff.org/ -T X:\Path\file 2^>^&1
  ^| findstr /irc:"< [0-9]* transfer complete" 2^>nul'
) do (if %%i equ 226 del /f/q X:\Path\file)


pedrosoft 16-06-2021 07:19 2960370

greg zakharov, спасибо, попробую предложенный вами вариант. Да я использую ftps, поэтому и выбрал curl.
Попутно спрошу можно ли curl заставить загружать несколько файлов? Сейчас, по всей видимости, после загрузки файла соединение закрывается и потом занова открывается для загрузки следующего файла. Если файлов много, то время на операцию загрузки значительно возрастает.

greg zakharov 16-06-2021 11:21 2960401

Цитата:

Цитата pedrosoft
Попутно спрошу можно ли curl заставить загружать несколько файлов?

Последовательно, причём если он собран без c-ares, о распоточивании речи быть не может. Что же до параллельной загрузки, то есть несколько файлов за сессию, лучше использовать aria2.


Время: 00:33.

Время: 00:33.
© OSzone.net 2001-