Получите последний обновленный файл из папки FTP

Пожалуйста, посмотрите этот снимок экрана, чтобы лучше понять наши требования:

https://www.screenr.com/QmDN

Мы хотим автоматизировать создание источника текстовых данных и подключение к MS Excel, чтобы конечным пользователям было проще подключиться к источнику текстовых данных (CSV) в MS Excel, чтобы они могли создавать свои собственные отчеты.

Шаги, которые я имею в виду:

  1. Использование FTP-клиента WinSCP со сценарием

  2. Напишите сценарий для получения самого последнего обновленного файла из папки FTP.

  3. Или вместо шага 2 загрузите все сгенерированные файлы с FTP в общую папку в сети.

  4. Получите самую последнюю версию созданного файла CSV

  5. Переименуйте файл в Стандартное соглашение об именах. Это должно быть имя, используемое в MS Excel в качестве источника данных CSV Text.

  6. Удалить все остальные файлы

Я разработал образец сценария, который может использоваться WinSCP для загрузки файлов из папки FTP:

# Automatically abort script on errors
option batch abort
# Disable overwrite confirmations that conflict with the previous
option confirm off
# Connect
open CSOD
# Change remote directory
cd /Reports/CAD
# Force binary mode transfer
option transfer binary
# Download file to the local directory d:\
#get "Training Attendance Data - Tarek_22_10_21_2014_05_05.CSV" "D:\MyData\Business\Talent Management System\Reports\WinCSP\"
get "*.CSV" "D:\MyData\Business\Talent Management System\Reports\WinCSP\Files\"
# Disconnect
close
exit

Затем я могу запланировать периодический запуск вышеуказанного кода с помощью этой команды:

winscp.com /script=example.txt

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

Ценю вашу помощь.

Тарек


person tarekahf    schedule 25.10.2014    source источник


Ответы (2)


Просто добавьте переключатель -latest в get команду:

get -latest "*.CSV" "D:\MyData\Business\Talent Management System\Reports\WinCSP\Files\"

Дополнительные сведения см. В статье WinSCP Загрузка самого последнего файла.

person Martin Prikryl    schedule 21.12.2015
comment
Спасибо ! По-настоящему ценю это. - person tarekahf; 21.12.2015
comment
Я только что сообразил, как могу принять ваш ответ как ответ, хотя уже немного поздно. - person tarekahf; 23.03.2016

Вы не указываете язык, который используете, здесь сценарий Ruby, который загружает самый последний файл пути FTP. Просто чтобы продемонстрировать, насколько легко и кратко это можно сделать с помощью такого языка сценариев, как Ruby.

require 'net/ftp'

Net::FTP.open('url of ftpsite') do |ftp|
  ftp.login("username", "password")
  path = "/private/transfer/*.*"
  # file[55..-1] gives the filename part of the returned string
  most_recent_file = ftp.list(path)[2..-1].sort_by {|file|ftp.mtime(file[55..-1])}.reverse.first[55..-1]
  puts "downloading #{most_recent_file}"
  ftp.getbinaryfile(most_recent_file, File.basename(most_recent_file))
  puts "done"
end
person peter    schedule 25.10.2014
comment
Спасибо. Я использовал скрипт инструмента WinSCP: winscp.net/eng/docs/scripting. Я не знаю Ruby, и здесь никто не знает, как программировать на Ruby. Благодарим за пример с использованием пакетных команд (командные строки Windows). - person tarekahf; 26.10.2014
comment
WinSCP - это не язык сценариев, это язык, специфичный для предметной области (на котором Ruby отлично подходит для чтения, потому что он настолько удобочитаем). Ruby - самый простой в использовании язык сценариев, который я знаю, он часто используется при обучении программированию детей. Советую взглянуть на него. Поскольку мне потребовалось несколько минут, чтобы сделать этот рабочий образец на Ruby, мне потребовались часы, чтобы сделать это в пакетном режиме, извините, я не буду этого делать - person peter; 26.10.2014
comment
Для этого используется командный файл: stackoverflow.com/questions/97371/ FOR / F delims = | %% I IN ('DIR . / B / O: D') DO SET NewestFile = %% I Таким образом, нет необходимости изучать новый язык, что создает дополнительный уровень сложности без надобности. - person tarekahf; 29.10.2014
comment
Вот ответ с форумов WinSCP: winscp.net/forum/viewtopic.php? p = 53040 # 53040 ... вроде уже есть решение. - person tarekahf; 29.10.2014