Обработать статус загрузки на 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 = удалить исходный файл, иначе не удалять
)
|
Сомнительно, учитывая что это 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'шный клиент (хреновенький, если его не поправили, но вполне себе рабочий), ну и через пошик вроде как тоже можно.
|
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)
|
greg zakharov, спасибо, попробую предложенный вами вариант. Да я использую ftps, поэтому и выбрал curl.
Попутно спрошу можно ли curl заставить загружать несколько файлов? Сейчас, по всей видимости, после загрузки файла соединение закрывается и потом занова открывается для загрузки следующего файла. Если файлов много, то время на операцию загрузки значительно возрастает.
|
greg zakharov |
16-06-2021 11:21 2960401 |
Цитата:
Цитата pedrosoft
Попутно спрошу можно ли curl заставить загружать несколько файлов?
|
Последовательно, причём если он собран без c-ares, о распоточивании речи быть не может. Что же до параллельной загрузки, то есть несколько файлов за сессию, лучше использовать aria2.
|
Время: 00:33.
© OSzone.net 2001-