Назад | Перейти на главную страницу

Объединение RoboCopy с FtpUse

Нашим клиентам необходимо передать указанные файлы из своей сети в нашу через FTP. Передача должна запускаться автоматически при изменении одного из указанных файлов. Для этого идеально подходит RoboCopy. Однако RoboCopy не поддерживает передачу на адреса FTP. Итак, я хотел бы сопоставить наш FTP-сайт с буквой диска на клиентском сервере. я нашел это FtpUse идеально подходит для сопоставления FTP с буквой диска. Сопоставление работает должным образом, и я могу видеть содержимое FTP-сайта в проводнике Windows - я также могу записывать данные на подключенный FTP-диск.

Итак, допустим, я сопоставил FTP-сайт с диском Q на моем локальном компьютере с помощью этой команды:

ftpuse Q: [ftp address] [password] /USER:[username]

И попробуйте настроить RoboCopy с помощью этой команды:

robocopy [source dir] Q:\ *.xls *.xlsx /COPY:DAT /LOG+:"[LogDir]\FtpCopyLog.txt" /V /NP /MON:1 /MOT:1 /R:10 /W:30 

Когда RoboCopy запускается, он выдает следующее сообщение об ошибке:

ОШИБКА 87 (0x00000057) Копирование файла [исходный каталог] \ test2.xlsm Параметр неверен

Я попытался подключить диск и запустить команду RoboCopy под учетной записью пользователя samme, но, похоже, это не решило проблему.

Надеюсь, кто-то может помочь.

Любая помощь будет принята с благодарностью.

Попробуйте использовать WinSCP в зеркальном режиме. WinSCP можно скачать отсюда:

http://winscp.net/eng/download.php

Используя WinSCP, вам не нужно подключать диск, он просто подключается к FTP напрямую и выполняет всю работу за вас.

Вот небольшой сценарий BAT, который делает это похожим на ROBOCOPY.

ВНИМАНИЕ: я добавил параметр -delete, который удаляет удаленные файлы, которые больше не соответствуют локальной папке. Двойные кавычки необходимы, потому что в локальном пути есть пробелы.

set FTPSERVER=v2008  
set FTPUSER=username  
set FTPPASS=password  
set FTPLOCALE=C:\Users\User\Desktop\Local folder  
set FTPREMOTO=/public  
winscp.com /command "open ftp://%FTPUSER%:%FTPPASS%@%FTPSERVER%/" ^
  "synchronize remote -delete ""%FTPLOCALE%"" %FTPREMOTO%"

Поскольку вы уже используете Windows, почему бы не использовать для этого Power Shell? Вы можете указать только новые файлы и запланировать задачу с помощью планировщика задач Windows со встроенными инструментами Windows. Не нужно платить за встроенный функционал. Я предполагаю, что вы используете небезопасное FTP-соединение. Несколько быстрых сценариев дадут вам очень гибкое дешевое решение. У меня есть несколько сценариев Power Shell, которые извлекают и отправляют файлы FTP на основе определенных критериев.

Когда копия выполняется, у вас есть разрешение на создание файлов, но не на их перезапись. Насколько велики файлы? Насколько я понимаю, каждый раз, когда файл редактируется, файл полностью копируется снова, и вы перезаписываете старый файл новой версией. Нет возможности оценить, что изменилось в файле, и просто добавить новые данные? Поскольку вы не пытаетесь добавить данные, а используемые вами инструменты не позволяют перезаписывать файл, теоретически вы можете написать какой-то промежуточный скрипт, который удаляет устаревшие файлы, когда они обнаруживаются непосредственно перед копированием нового файла на место. Это звучит как неуклюжее решение, но все это также звучит как неуклюжий процесс. Лично я бы переоценил, какова здесь цель и тому подобное, но я стараюсь просто отвечать на вопрос. Удачи!