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

lekanka 03-08-2012 13:02 1964069

Копирование последнего файла с FTP на локальный компьютер
 
Здравствуйте, буду признательна если кто-нибудь поможет написать .bat или посоветует где почитать.

Проблема: на FTP два раза в день падают файлы следующего вида f_1, f_2, f_3..... Нужен bat который будет подключаться к FTP и копировать файл с самым последним номером на локальный компьютер в папку из которой предварительно удаляется предыдущий.

В настоящее время созданы следующие файлы:
ftp.txt

open xx.xx.x.xxx
user1
123456

ls -d C:\folder\file.txt

$log=C:\folder\file.txt

bin
recv f_789.rar C:\folder\f_789.rar
disconnect
quit


1.bat

ftp -s:ftp.txt

for /f %%i in (%log%) do (
set filename=%%i
)
pause

Т.е. у меня не получается взять имя последнего файла работая с FTP. Можно ли реализовать в файле ftp.txt цикл аналогичный тому, что реализован сейчас в 1.bat? Можно ли присвоить это значение переменной? Как работать с переменными при подключении к FTP?

igvak 06-08-2012 12:30 1965442

Вам нужно с некого ФТП забирать файлы, а почему бы вам не обратить внимание на такую связку : wget curl xcopy
По сути - вы батником забираете с ФТП (только изменённые и новые) файлы, а xcopy регулируете свои потребности внутри локалки.
Или "взять" dir с ФТП в файл и на основании этого файла "брать" последнее имя для скачивания или другой обработки.
Если кому-то нужны конкретные примеры, обращайтесь - покажу свои, работающие примеры.

lekanka 07-08-2012 10:05 1966016

если использовать xcopy не совсем понятно как будет определятся новый файл или нет, папка в которую я копирую файл должно содержать только последний, актуальный.
Например если там лежал f_1, то сначала удаляется f_1, а потом в эту папку копируется f_2.

в файле ftp.txt я использую команду ls -d C:\folder\file.txt, которая на локальный диск в файл записывает все имена файлов с ftp.
Далее я могу в 1.bat взять последнее имя файла с помощью цикла
for /f %%i in (%log%) do (set filename=%%i)
но как это сделать в файле ftp.txt? при попытке использовать там данный цикл выдается ошибка о том, что команда не допустима.

В общем я определила имя последнего файла, но как дальше работать с этим именем не понимаю.

igvak 08-08-2012 14:20 1966828

lekanka - Вы сделали основное - ...В общем я определила имя последнего файла, но как дальше работать с этим именем не понимаю...
Имея переменную с именем последнего файла - к нему (файлу) можно применять все имеющинся команды.
первое - наверное нужно скопировать не имя, а файл с этим именем, себе на локальный ресурс.
второе - ой ну тут уже любые команды - от ваших нужд зависит, я бы вторым скопировал файл в архив накоплений, чирконул бы в лог - мол "ходил туды, видел это, а взял это + год/мес/день/час/мин", а уж потом обрабатывал "вытянутый" файл по вашему назначению.

lekanka 09-08-2012 11:32 1967273

Проблема в этих самых любых командах. Проблема в том, что имя файла я определяю уже на локальном компьютере, а не на ftp. Как этой переменной теперь воспользоваться на ftp? Фактически когда я определила эту переменную я уже отключилась от ftp. А как определить имя файла не отключаясь от ftp не знаю.

lekanka 13-08-2012 13:46 1969456

Проблема решена

(echo user username pass
echo ls -d
echo quit)|ftp -n xx.xx.x.xx > C:\folder\file.txt

for /f %%i in (C:\folder\file.txt) do (
set filename=%%i
)
pause
(
echo user username pass
echo bin
echo hash
echo prompt
echo get %filename%
) | ftp -n xx.xx.x.xxx


Время: 13:48.

Время: 13:48.
© OSzone.net 2001-