CMD/BAT - [решено] Копирование последнего файла с FTP на локальный компьютер

Ответить
Аватара пользователя
lekanka

CMD/BAT - [решено] Копирование последнего файла с FTP на локальный компьютер

Сообщение lekanka »

Здравствуйте, буду признательна если кто-нибудь поможет написать .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

Re: CMD/BAT - [решено] Копирование последнего файла с FTP на локальный компьютер

Сообщение igvak »

Вам нужно с некого ФТП забирать файлы, а почему бы вам не обратить внимание на такую связку : wget curl xcopy

По сути - вы батником забираете с ФТП (только изменённые и новые) файлы, а xcopy регулируете свои потребности внутри локалки.

Или "взять" dir с ФТП в файл и на основании этого файла "брать" последнее имя для скачивания или другой обработки.

Если кому-то нужны конкретные примеры, обращайтесь - покажу свои, работающие примеры.
Аватара пользователя
lekanka

Re: CMD/BAT - [решено] Копирование последнего файла с FTP на локальный компьютер

Сообщение lekanka »

если использовать 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

Re: CMD/BAT - [решено] Копирование последнего файла с FTP на локальный компьютер

Сообщение igvak »

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

Имея переменную с именем последнего файла - к нему (файлу) можно применять все имеющинся команды.

первое - наверное нужно скопировать не имя, а файл с этим именем, себе на локальный ресурс.

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

Re: CMD/BAT - [решено] Копирование последнего файла с FTP на локальный компьютер

Сообщение lekanka »

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

Re: CMD/BAT - [решено] Копирование последнего файла с FTP на локальный компьютер

Сообщение lekanka »

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



(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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»