Показать полную графическую версию : [решено] Копирование последнего файла с 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?
Вам нужно с некого ФТП забирать файлы, а почему бы вам не обратить внимание на такую связку : wget curl xcopy
По сути - вы батником забираете с ФТП (только изменённые и новые) файлы, а xcopy регулируете свои потребности внутри локалки.
Или "взять" dir с ФТП в файл и на основании этого файла "брать" последнее имя для скачивания или другой обработки.
Если кому-то нужны конкретные примеры, обращайтесь - покажу свои, работающие примеры.
если использовать 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? при попытке использовать там данный цикл выдается ошибка о том, что команда не допустима.
В общем я определила имя последнего файла, но как дальше работать с этим именем не понимаю.
lekanka - Вы сделали основное - ...В общем я определила имя последнего файла, но как дальше работать с этим именем не понимаю...
Имея переменную с именем последнего файла - к нему (файлу) можно применять все имеющинся команды.
первое - наверное нужно скопировать не имя, а файл с этим именем, себе на локальный ресурс.
второе - ой ну тут уже любые команды - от ваших нужд зависит, я бы вторым скопировал файл в архив накоплений, чирконул бы в лог - мол "ходил туды, видел это, а взял это + год/мес/день/час/мин", а уж потом обрабатывал "вытянутый" файл по вашему назначению.
Проблема в этих самых любых командах. Проблема в том, что имя файла я определяю уже на локальном компьютере, а не на ftp. Как этой переменной теперь воспользоваться на ftp? Фактически когда я определила эту переменную я уже отключилась от ftp. А как определить имя файла не отключаясь от ftp не знаю.
Проблема решена
(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
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC