Компьютерный форум 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=141835)

stolyar 04-06-2009 10:17 1134633

[решено] Копирование файла с FTP-сервера
 
Приветствую!

Не могу никак разобраться в написании батника, который бы копировал нужный мне файл с ФТП. Я напоролся на тему - http://forum.oszone.net/post-1094450.html , но так как там написано у меня не получается..((( Принцип мой такой:
Подключение к FTP - юзер Anonimous без пароля - зайти /subfolder1/subfolder2 - там лежит файл file.zip который нужно скачать и сохраниться на локальный диск.

NEED HELP!

Genry111 04-06-2009 11:01 1134676

stolyar, я сделал так , у меня в папке d:\update лежит 2 файла 1. update.cmd 2.upd.script
update.cmd :
Код:

@echo off
d:
cd UPDATE
ftp -s:D:\UPDATE\upd.script -i >D:\UPDATE\ftp.log

upd.script :
Код:

open your.site.com
user
password
cd subfolder1
cd subfolder2
binary
get  file.zip
quit


stolyar 04-06-2009 11:09 1134681

Два вопроса:

1. Куда он сохранит файл?
2. где USER и PASSWORD, мне там через пробел написать имя пользователя и пароль? А если пароля нет, строчку пустой оставить, или удалить?

amel27 04-06-2009 11:18 1134693

можно все в батник запихать:
Код:

@Echo Off
:: ~Параметры соединения
Set $Host=192.168.10.10
Set $User=anonymous
Set $Pass=user@mail.ru
:: ~Что и куда копируем
SET $SRC=DIR\File.txt
SET $DST=C:\TEST\File.txt
:: ~Временные файлы
Set $FFtp=%~dpn0.cfg
:: Готовим CFG-файл
Echo %$User%>"%$FFtp%"
Echo %$Pass%>>"%$FFtp%"
Echo get "%$SRC%" "%$DST%">>"%$FFtp%"
Echo bye>>"%$FFtp%"
:: Выполняем команду
FTP -s:"%$FFtp%" %$Host%


stolyar 04-06-2009 11:26 1134703

amel27, а вот 5 строчка, где написано "мыло", это пароль сюды указывать? А если пароля нет?

amel27 04-06-2009 11:34 1134714

stolyar, для anonymous можно ставить любое мыло... ну или так:
Код:

@Echo Off
:: ~Параметры соединения
Set $Host=192.168.10.10
Set $User=anonymous
Set $Pass=
:: ~Что и куда копируем
SET $SRC=DIR\File.txt
SET $DST=C:\TEST\File.txt
:: ~Временные файлы
Set $FFtp=%~dpn0.cfg
:: Готовим CFG-файл
Echo.%$User%>"%$FFtp%"
Echo.%$Pass%>>"%$FFtp%"
Echo get "%$SRC%" "%$DST%">>"%$FFtp%"
Echo bye>>"%$FFtp%"
:: Выполняем команду
FTP -s:"%$FFtp%" %$Host%


stolyar 04-06-2009 13:23 1134813

Я подставляю:

Код:

@Echo Off
:: ~Параметры соединения
Set $Host=87.242.75.131
Set $User=anonymous
Set $Pass=
:: ~Что и куда копируем
SET $SRC=pub\drweb\bases\drwebase.zip
SET $DST=D:\TEST\drwebase.zip
:: ~Временные файлы
Set $FFtp=%~dpn0.cfg
:: Готовим CFG-файл
Echo.%$User%>"%$FFtp%"
Echo.%$Pass%>>"%$FFtp%"
Echo get "%$SRC%" "%$DST%">>"%$FFtp%"
Echo bye>>"%$FFtp%"
:: Выполняем команду
FTP -s:"%$FFtp%" %$Host%

Нифига не идет ((( Долго висит окно CMD.... файл .cfg пишет:

[code]
anonymous

get "pub\drweb\bases\drwebase.zip" "D:\TEST\drwebase.zip"
bye
[]/code


Что не так?

amel27 04-06-2009 13:39 1134830

проверил - у меня нормально качается, по ходу у вас проблемы в сети, попробуйте в командной строке запустить "FTP" и вручную подключиться через "open 87.242.75.131"

stolyar 04-06-2009 14:05 1134860

Пишет:

Код:

ftp: connect :Неизвестный код ошибки
Кстати, возможно действительно проблемы в сети... Я у себя дома проверю, а потом отпишу.. Хотя, раз у Вас, amel27, работает, значит и у меня будет... Так что думаю что топик можно закрывать! =)
Большое спасибо! Проблема решена!

Sarus 01-12-2009 00:57 1283862

Копирует определенный файл на ура, а если копировать по маске, то:
550 Failed to open file

Xaegr 01-12-2009 10:34 1284036

Цитата:

Цитата Sarus
Копирует определенный файл на ура, а если копировать по маске, то:
550 Failed to open file »

Вы уверены что используете mget для копирования по маске, а не простой get?

Sarus 01-12-2009 14:30 1284198

Цитата:

Цитата Xaegr
Вы уверены что используете mget для копирования по маске, а не простой get?

Точно, использовал get для копирования по маске. Исправил на mget все за работало. Спасибо.
Код:

@Echo Off
:: ~Параметры соединения
Set $Host=87.242.75.131
Set $User=anonymous
Set $Pass=
:: ~Что и куда копируем
SET $SRC=pub/drweb/bases/*.txt
SET $DST=D:\Temp\UploadFtp\2009\*.txt
:: ~Временные файлы
Set $FFtp=%~dpn0.cfg
:: Готовим CFG-файл
Echo.%$User%>"%$FFtp%"
Echo.%$Pass%>>"%$FFtp%"
Echo mget "%$SRC%" "%$DST%">>"%$FFtp%"
Echo prompt
Echo bye>>"%$FFtp%"
:: Выполняем команду
FTP -i -s:"%$FFtp%" %$Host%

Файл копируется в текущий каталог где лежит bat, т.е. в D:\Temp\UploadFtp, хотя должен копироваться в D:\Temp\UploadFtp\2009.
Что не так?

Xaegr 01-12-2009 17:25 1284338

Цитата:

Цитата Sarus
Файл копируется в текущий каталог где лежит bat, т.е. в D:\Temp\UploadFtp, хотя должен копироваться в D:\Temp\UploadFtp\2009.
Что не так? »

Попробуйте перед выполнением команды сделать cd в каталог назначения, а ftp.exe передавать уже полный путь на файл скрипта.

Sarus 01-12-2009 17:45 1284349

Дописал:
Код:

...
:: Выполняем команду
CD D:\Temp\UploadFtp\2009
FTP -i -s:"%$FFtp%" %$Host%

Помогло.

Sarus 04-12-2009 01:40 1286325

Здравствуйте еще раз.
Код:

@Echo Off
:: Параметры соединения
Set $Host=ftp.microsoft.com
Set $User=anonymous
Set $Pass=
:: Что и куда копируем
SET $SRC=MISC/beckyk/*.*
SET $DST=D:\Temp\GetFtp\2009\*.*
:: Временные файлы
Set $FFtp=%~dpn0.cfg
:: Готовим CFG-файл
Echo.%$User%>"%$FFtp%"
Echo.%$Pass%>>"%$FFtp%"
Echo mget "%$SRC%" "%$DST%">>"%$FFtp%"
Echo prompt
Echo bye>>"%$FFtp%"
:: Выполняем команду
CD D:\Temp\GetFtp\2009
FTP -d -i -s:"%$FFtp%" %$Host%>>GetFtp.log

При использовании этого скрипта все отлично работало на ftp: //87.242.75.131, но не отрабатывает у меня на рабочем ftp и такая же ситуация на ftp.microsoft.com
В логе ошибки:
GetFtp.log
Связь с ftp.microsoft.akadns.net.
220 Microsoft FTP Service
Пользователь (ftp.microsoft.akadns.net: (none)): --->
USER anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
--->
PASS
230-Welcome to FTP.MICROSOFT.COM. Also visit http://www.microsoft.com/downloads.
230 User logged in.
ftp> ---> mget "MISC/beckyk/*.*" "D:\Temp\GetFtp\2009\*.*"
TYPE A
---> PORT 192,168,1,33,222,96
---> NLST MISC/beckyk/*.*
---> PORT 192,168,1,33,222,97
---> NLST D:\Temp\GetFtp\2009\*.*
The parameter is incorrect.

---> TYPE A
200 Type set to A.
Не удается найти список файлов удаленного компьютера
ftp> ---> bye
QUIT
221 Thank you for using Microsoft products.

Уже голосу сломал, помогите разобраться в проблеме. И как сделать чтоб в случае успешного копирования файлы удалялись с ftp?

Oleg48 04-12-2009 16:14 1286771

Как вариант предлогаю посмотреть альтернативный ftp-браузер работающий с командной строки - ncftp в который входят несколько очень удачных программ, например скачивание с ftp.microsoft.com я реализовал так (пример работает):
Код:

echo 
SETLOCAL enabledelayedexpansion 
SET "pathBase=%~d0\_Base\_All\test2009" 
cd "%pathBase%" 
ncftpget -F ftp://ftp.microsoft.com/MISC/test/*.* 
exit

А в help по самой ncftp прочитал такие строки:
Код:

get ...
Another thing you can do is delete a remote file after you download it. This can be useful when a remote host expects a file to be removed when it has been retrieved. Use the double-D flag, such as ``get -DD'' to do this.

Вольный перевод (за достоверность не отвечаю):
Код:

Другая вещь, которую Вы можете сделать, удалять отдаленный файл после того, как Вы загрузили его. Это может быть полезно,  когда отдаленный главный компьютер ожидает, что файл будет удален, когда он был восстановлен. Используйте удвоенный флажок -D,  "get -DD" можно сделать это.
Этой возможностью я еще не пользовался. Надеюсь что это поможет Вам

Sarus 04-12-2009 18:33 1286883

Oleg48, спасибо за помощь, все-таки решил проблему с батником... теперь работает.
Осталось только разобраться с удалением файлов на фтп в случае успешного копирования в локальную папку.
Просто не хочется использовать альтернативные программки.

Sarus 08-12-2009 00:28 1289133

Приветствую знатоков!
При использовании вот этого
bat
HTML код:

Set $Host=xx.xxx.xxx.xx
Set $User=****
Set $Pass=****
Set $SRC=BDK6911
Set DST=D:\GetFtp
Set $FFtp=%~dpn0.cfg
Set $FTmp=%~dpn0.tmp
Echo.%$User%>"%$FFtp%"
Echo.%$Pass%>>"%$FFtp%"
Echo cd %$SRC%>>"%$FFtp%"
Echo mget *.*>>"%$FFtp%"
Echo prompt
Echo bye>>"%$FFtp%"
cd %DST%\%Date%
FTP -i -s:"%$FFtp%" %$Host%>~GetFtp.log

все копируется, однако заметил, что архивы (.arj и .rar) после копирования увеличиваются в размере на несколько килобайт, следовательно CRC-сумма уже другая. Может мне кто-нибудь объяснить с чем это связанно? :blink:
GetFtp.log
230 User **** logged in.
ftp> cd BDK6911
250 CWD command successful
ftp> mget *.*
200 Type set to A
200 PORT command successful
150 Opening ASCII mode data connection for 1215_02.12.2009_15.59.arj (529297 bytes)
226 Transfer complete.
ftp: 530840 байт получено за 2.67 (сек) со скоростью 198.59 (КБ/сек).
ftp> bye
221 Goodbye.

Заранее спасибо!

Iska 08-12-2009 04:45 1289207

Попробуйте посмотреть это:
Код:

hh.exe %SystemRoot%\Help\ntcmds.chm::/ftp__binary.htm

Sarus 11-12-2009 09:37 1292267

Цитата:

Цитата Iska
Попробуйте посмотреть это: ...

Действительно то что надо. Как-то упустил этот момент.

Seryoga204 21-08-2010 23:09 1478953

А как переместить файлы с сервера, а не копировать?

NiOl 23-08-2010 17:30 1480165

сначала их скопировать, а затем удалить.
запустите ftp.exe и в нем наберите help - получите все команды. Вам подойдет либо delete, либо mdelete - во втором случае указываете маску для удаления нескольких файлов. Команду вставляете сразу после get/mget

Seryoga204 24-08-2010 15:31 1480789

Цитата:

А как переместить файлы с сервера, а не копировать?
Решил попробывать для этих целей програмку ncftpget, но что не получается, подскажите пожалуйста как реализовать копирование всех файлов с определенной папки на фтп, себе на локальный диск с последующим их удалением при удачной загрузке. В мануале к ncftpget пишут
Код:

-DD Delete remote file after successfully downloading it.
набросал батник, но он не работает:
Код:

@Echo Off

Set USER=adm
Set PASS=123

ncftpget -u %USER% -p %PASS%  192.168.1.3 -DD "pub/01/print/*.*" "L:\2010\*.*"


deepred 24-08-2010 23:12 1481026

Seryoga204,

Данной утилитой не пользовался, но просмотрев справку по её использованию (ncftpget_manual ), замечу, что командную строку для неё формируете Вы не верно...

Попробуйте запустить такой код:

Код:

@echo off
set user=adm & set pass=123

ncftpget.exe -dd -u %user% -p %pass% 192.168.1.3 "L:\2010\*.*" "pub/01/print/*.*"

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

PS: а чем Вас не устроил вариант, предложенный NIOL в post#23?

Seryoga204 24-08-2010 23:15 1481033

deepred,
Спасибо все получилось!

Devils0411 17-09-2010 10:43 1497502

Нужна ваша помощь... воспользовался написанным здесь кодом для скачивания с фтп... но выдает ошибку 550 File too large... Мол файл сильно велик... файл действительно занимает 94.5Мб. Как обойти это ограничение?

witsvwn 07-02-2011 19:07 1607030

Цитата:

Цитата NiOl
Вам подойдет либо delete, либо mdelete - во втором случае указываете маску для удаления нескольких файлов. Команду вставляете сразу после get/mget »

Есть ВАТ-ник, который забирает все файлы из директории Receive (mget *.*), затем очищает Receive (mdel *.*)

Так вот возникла такая проблема. Пока mget *.* забирал, в Receive добавился новый файл и он безвозвратно теряется.
Возможно-ли передать в команду mdel список принятых файлов, чтоб новое не удалялось.

Заранее Спасибо откликнувшимся.

newsky 17-05-2017 09:51 2737458

Воспользовался батником из этой темы:
bat
Код:

Set $Host=xx.xxx.xxx.xx
Set $User=****
Set $Pass=****
Set $SRC=BDK6911
Set DST=D:\GetFtp
Set $FFtp=%~dpn0.cfg
Set $FTmp=%~dpn0.tmp
Echo.%$User%>"%$FFtp%"
Echo.%$Pass%>>"%$FFtp%"
Echo cd %$SRC%>>"%$FFtp%"
Echo mget *.*>>"%$FFtp%"
Echo prompt
Echo bye>>"%$FFtp%"
cd %DST%\%Date%
FTP -i -s:"%$FFtp%" %$Host%>~GetFtp.log


С файлами всё в порядке, а вот как скопировать всё содержимое (папки с вложениями), причем из корня ФТП? Что нужно подправить в батнике? Спасибо.

Iska 17-05-2017 11:20 2737472

Никак. Ничего. Пожалуйста.

Используйте другой клиент, например, wget.


Время: 18:03.

Время: 18:03.
© OSzone.net 2001-