CMD/BAT - Обработать статус загрузки на FTP

Ответить
Аватара пользователя
pedrosoft

CMD/BAT - Обработать статус загрузки на FTP

Сообщение pedrosoft »

Добрый день.



Прошу в помощи в написания условия удаления файла только в том случае, что получен положительный ответ от 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 = удалить исходный файл, иначе не удалять
)
Вложения

[Расширение png было запрещено, вложение больше недоступно.]

Аватара пользователя
Elven

Re: CMD/BAT - Обработать статус загрузки на FTP

Сообщение Elven »

Сомнительно, учитывая что это 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

Re: CMD/BAT - Обработать статус загрузки на FTP

Сообщение pedrosoft »

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

Re: CMD/BAT - Обработать статус загрузки на FTP

Сообщение pedrosoft »

Цитата 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

Re: CMD/BAT - Обработать статус загрузки на FTP

Сообщение pedrosoft »

greg zakharov, спасибо, попробую предложенный вами вариант. Да я использую ftps, поэтому и выбрал curl.

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

Re: CMD/BAT - Обработать статус загрузки на FTP

Сообщение pedrosoft »

Цитата pedrosoft:



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



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

Вернуться в «Скриптовые языки администрирования Windows»