PDA

Показать полную графическую версию : Обработать статус загрузки на FTP


pedrosoft
15-06-2021, 16:55
Добрый день.

Прошу в помощи в написания условия удаления файла только в том случае, что получен положительный ответ от 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
Сомнительно, учитывая что это 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
Elven, такая конструкция не подходит, curl воспринимает продолжение строки | findstr /L "226 Transfer complete" && ( -- воспринимает как продолжение команд и вылетает с ошибкой.

greg zakharov
15-06-2021, 20:06
А зачем в 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
greg zakharov, спасибо, попробую предложенный вами вариант. Да я использую ftps, поэтому и выбрал curl.
Попутно спрошу можно ли curl заставить загружать несколько файлов? Сейчас, по всей видимости, после загрузки файла соединение закрывается и потом занова открывается для загрузки следующего файла. Если файлов много, то время на операцию загрузки значительно возрастает.

greg zakharov
16-06-2021, 11:21
Попутно спрошу можно ли curl заставить загружать несколько файлов?Последовательно, причём если он собран без c-ares, о распоточивании речи быть не может. Что же до параллельной загрузки, то есть несколько файлов за сессию, лучше использовать aria2.




© OSzone.net 2001-2012