mol2751 10 / 10 / 3 Регистрация: 08.07.2015 Сообщений: 179 |
||||
1 |
||||
«Ошибка при открытии файла макроса…»07.04.2016, 10:51. Показов 3243. Ответов 7 Метки нет (Все метки)
У меня батник настроенный на работу с FTP. На машине с WINXP он работает отлично. Сам батник
ну и в папке с батником лежит send.txt
0 |
4332 / 2122 / 661 Регистрация: 26.04.2015 Сообщений: 6,823 |
|
07.04.2016, 14:19 |
2 |
ну и в папке с батником лежит send.txt — не верю, проверил только что: нет файла, сразу пишет Ошибка открытия файла макросаsend.txt, есть — открывает. Добавлено через 47 секунд
0 |
10 / 10 / 3 Регистрация: 08.07.2015 Сообщений: 179 |
|
08.04.2016, 08:28 [ТС] |
3 |
Скопировал батник и файл на вторую машину с Вин8.1, там работает…. а на первой, так и не заводится….что за чудеса. Добавлено через 16 минут
0 |
4332 / 2122 / 661 Регистрация: 26.04.2015 Сообщений: 6,823 |
|
08.04.2016, 12:17 |
4 |
mol2751, Видимо запуск где-то под админом, а где-то нет и поиск рядом с собой в папке запуска у админа (cmd из system32) пляшет от корня, а иначе достаточно папки в которой батник. Добавлено через 1 минуту
0 |
10 / 10 / 3 Регистрация: 08.07.2015 Сообщений: 179 |
|
08.04.2016, 12:20 [ТС] |
5 |
Полный путь пытался и так и сяк. Не кушает(
0 |
ComSpec 3455 / 1993 / 635 Регистрация: 26.02.2014 Сообщений: 1,457 |
||||
08.04.2016, 18:14 |
6 |
|||
Решение
ну и в папке с батником лежит send.txt Ну и пусть там и остаётся лежать. Только код, выполнение которого не зависит от способа запуска пакетного файла, должен быть таким:
.
1 |
alpap |
08.04.2016, 19:05
|
Не по теме:
«%~dp0send.txt» — ага, значит путь можно все-таки задать, только правильно.
0 |
10 / 10 / 3 Регистрация: 08.07.2015 Сообщений: 179 |
|
11.04.2016, 08:38 [ТС] |
8 |
-s:»%~dp0send.txt» Помогло! Спасибо!
0 |
Представляю вашему вниманию инструментарий для работы с файлами по FTP
Как известно, отправить файл на FTP сервер (или загрузить файл с FTP, создать папку на FTP сервере, и т.д.) можно при помощи таких API-функций из библиотеки wininet.dll, как FtpPutFile, FtpGetFile, FtpRenameFile, FtpDeleteFile, FtpRemoveDirectory, FtpCreateDirectory, FtpFindFirstFile и т.д.
Как именно использовать эти функции — можете посмотреть в коде надстройки для отправки файлов Excel на FTP сервер
В чем недостаток этого способа — так это в необходимости обеспечения совместимости кода с различными платформами.
В частности, чтобы код с функциями API работал и в Office 2010, и в 64-битной Windows, необходимо заметно увеличить объём кода. А, поскольку описание этих функций из wininet.dll и без того занимает много места (а универсальный код вообще займёт сотню строк), да и надо ещё и разбираться во всех этих функциях, т.к. в разных версиях Windows возможны различия в способе вызова функций из wininet.dll, и были созданы аналоги этих функций для работы с FTP, не использующие WinAPI
Сподвигла меня на это решение необходимость реализации средств обновления надстроек Excel, где необходимо было реализовать функционал отправки файлов Excel на FTP сервер, причем так, чтобы это стабильно работало на всех компьютерах. Попутно, кстати, родилась и функция загрузки файла с сервера без использования WinAPI, которая тоже вошла в состав данного инструментария.
Основу предлагаемого мной решения составляет модуль класса FTPcommander, который предоставляет вам следующие функции:
- Function DownloadFile(ByVal FtpFolder$, ByVal FtpFilename$, ByVal LocalPath$) As Boolean
(Функция скачивает файл с FTP-сервера с именем FtpFilename$ из папки FtpFolder$. Скачанный файл сохраняется на компьютере под именем (и по пути) LocalPath$. Функция возвращает TRUE, если загрузка файла завершилась успешно) - Function UploadFile(ByVal LocalPath$, Optional ByVal FtpFolder$, Optional ByVal FtpFilename$ = «») As String
(Функция загружает файл LocalPath$ по FTP на сервер в папку FtpFolder$. Если задан параметр FtpFilename$, отправленный файл получает имя FtpFilename$. Функция возвращает ссылку на файл, если закачка файла завершилась успешно) - Function CreateNewFolder(ByVal FtpFolder$) As Boolean
(Функция создаёт папку FtpFolder$ на FTP сервере. Возвращает TRUE, если папка была успешно создана, или существовала ранее) - Function DeleteFile(ByVal FtpFolder$, ByVal FtpFilename$) As Boolean
(Функция создаёт папку FtpFolder$ на FTP сервере. Возвращает TRUE, если папка была успешно создана, или существовала ранее) - Function DownloadFileFromURL(ByVal URL$, ByVal LocalPath$) As Boolean
(Функция скачивает файл по ссылке URL$, и сохраняет его по пути LocalPath$. Возвращает TRUE, если файл был успешно загружен) - Функция GetLastError возвращает информацию об ошибке, если некая функция была завершена некорректно (возвратила FALSE)
Дополнительно в составе модуля класса есть функции чтения и записи текстовых файлов ReadTXTfile и SaveTXTfile, а также функции перекодировки файлов и текста ChangeFileCharset и ChangeTextCharset
Как использовать модуль класса FTPcommander для работы с файлами по FTP:
1) Откройте прикреплённый к статье файл Excel, и мышом перетащите модуль класса FTPcommander в свой файл
2) Пропишите настройки FTP аккаунта в специальной функции, или сохраните их в реестре Windows
(подробнее об этом — ниже)
3) В своём макросе создаёте экземпляр класса FTPcommander, и используете его методы для работы с файлами
Создать экземпляр класса вам поможет следующий код: Dim FTP As New FTPcommander
Примеры макросов отправки и скачивания файлов доступны в прикреплённом файле (в модуле mod_TestFTP):
Вот один из примеров использования класса FTPcommander:
Private Sub ЗагрузкаФайлаНаFTPсервер() ' Этот макрос загружает файл "C:ПЖиВ.jpg" в корневую папку FTP сервера, ' переименовывая файл в "ER" Dim FTP As New FTPcommander Link$ = FTP.UploadFile("C:ПЖиВ.jpg", , "ER") ' В переменную Link$ возвращается ссылка вида "http://u3661.seiko.vps-private.net/ER", ' по которой доступен загруженный через FTP файл End Sub
Как видите, всего 2 строки кода, — и ваш файл оказался загружен на FTP сервер.
Ещё один пример использования:
Private Sub ЗагрузкаСПоследующимСкачиваниемФайла() Dim FTP As New FTPcommander fn$ = "C:Documents and SettingsAdminРабочий столstamp.png" ' отправляем файл с рабочего стола на FTP сервер ' (на сервере файл получит имя "1 2 3.png") Link$ = FTP.UploadFile(fn$, , "1 2 3.png") If Len(Link$) Then Debug.Print "Загруженный файл доступен по ссылке: ", Link$ Else Debug.Print "Ошибка: ", FTP.GetLastError End If ' а теперь скачиваем с сервера ранее загруженный файл "1 2 3.png" ' Скачанный файл окажется в той же папке (Рабочий стол), ' и получит имя "stamp.png222" res = FTP.DownloadFile("", "1 2 3.png", fn$ & "222") If res Then Debug.Print "Файл успешно загружен с FTP" Else Debug.Print "Ошибка: ", FTP.GetLastError End If End Sub
Есть 2 способа задать настройки FTP аккаунта для использования объектом FTPcommander:
1 способ — один раз запустить макрос следующего вида:
Sub Save_FTP_Account_Information() ' достаточно запустить ОДИН РАЗ! ' Cохраняем в реестре Windows настройки FTP-аккаунта по-умолчанию SaveSetting Application.Name, "FTP", "Host", "Имя или IP адрес сервера FTP" SaveSetting Application.Name, "FTP", "Login", "Имя пользователя (логин)" SaveSetting Application.Name, "FTP", "Password", "Пароль к FTP серверу" SaveSetting Application.Name, "FTP", "BaseFolder", "путь к стартовой папке, например, /www/" SaveSetting Application.Name, "FTP", "BaseURL", "http://Адрес Вашего Сайта, куда будут закачиваться файлы/" End Sub
Этот макрос запишет все необходимые настройки в реестр Windows, и впоследствии будет брать их оттуда
Преимущество этого способа: один раз запустили макрос, потом удалили его, — и можно нигде в коде не прописывать секретные данные FTP аккаунта
Недостаток этого способа: при хранении настроек в реестре, возможен доступ только к одному FTP серверу
2 способ — для инициализации объекта FTPcommander использовать специальные функции с настройками:
Function MyFTPaccount() As FTPcommander ' возвращает объект типа FTPcommander, с нужными настройками Set MyFTPaccount = New FTPcommander With MyFTPaccount .Host = "Имя или IP адрес сервера FTP" .Login = "Имя пользователя (логин)" .Password = "Пароль к FTP серверу" .BaseFolder = "путь к стартовой папке, например, /www/" .BaseURL = "http://Адрес Вашего Сайта, куда будут закачиваться файлы/" End With End Function
Пример использования функции:
Sub test() Dim FTP As FTPcommander ' объявляем переменную Set FTP = MyFTPaccount ' создаём объект с нужными настройками FTP.UploadFile ("C:123.jpg") ' отправляем файл на сервер End Sub
Преимущества этого способа: возможно работать с несколькими FTP серверами одновременно, конфиденциальные данные (настройки FTP аккаунта) не хранятся в открытом виде в реестре
Недостаток этого способа: настройки FTP аккаунта хранятся в коде VBA — если файл попадёт постороннему человеку, он легко сможет добраться до этих настроек (как известно, любые пароли на VBA ломаются за секунду)
На клиентской машине установлена Win7.
На сервере Ubuntu 14.04 c VSFTPD.
Когда на клиентской машине запускаю консоль и пытаюсь подсоединиться через FTP — получается.
Но хотелось бы автоматизировать действия и для этого сделал небольшой батник
ftp -s:enter.txt -i 192.168.5.3
cd 1C
mput C:UserssyaDesktopDocuments.rar
В той же папке, откуда я запускаю *.bat-файл лежит enter.txt со списком команд:
MyLogIn
MyPassword
cd 1C
mput C:UserssyaDesktopDocuments.rar
Но при запуске *.bat-файла мне консоль пишет:
C:Userssya>ftp -s:enter.txt -i 192.168.5.3
ошибка открытия файла макросаenter.txt
Обмен файлами с компьютером, на котором запущена служба
сервера FTP. FTP может использоваться интерактивно.
FTP [-v] [-d] [-i] [-n] [-g] [-s:имя_файла] [-a] [-A] [-x:sendbuffer]
[-r:recvbuffer] [-b:asyncbuffers] [-w:windowsize] [узел]
Если же я пропишу жесткий путь
ftp -s:C:UserssyaDesktopenter.txt -i 192.168.5.3
cd 1C
mput C:UserssyaDesktopDocuments.rar
, то:
C:Userssya>ftp -s:"C:UserssyaDesktopenter.txt" -i 192.168.5.3
Связь с 192.168.5.3.
220 (vsFTPd 3.0.2)
Пользователь (192.168.5.3:(none)):
331 Please specify the password.
530 Login incorrect.
Сбой входа.
ftp> cd 1C
530 Please login with USER and PASS.
ftp> mput C:UserssyaDesktopDocuments.rar
C:UserssyaDesktopDocuments.rar:
ftp>
Пытался сделать так, как написано на stackoverflow, но что-то тоже не получилось.
И никак не могу определить, где я ошибся.
Страница 1 из 2
-
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
Указаны все настройки по подключению, которые работают в FTP клиенте.
При нажатии «Проверить соединение» следующая ошибка:Папки для загрузки менял и создавал для них разные доступы. Все равно ошибка. -
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.818
- Город:
- Барнаул
Здравствуйте.
Какую рабочую папку указали? -
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.818
- Город:
- Барнаул
-
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
Папку: site.ru/public_html
Пробывал: site.ru/public_html/cd. Пробелов в конце адреса нет. -
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.818
- Город:
- Барнаул
Попробуйте другой хостинг. У меня и у моих коллег работает хорошо. Тестировали много раз. В чем у вас проблема — непонятно. Судя по ошибке — не так указали рабочую папку…
-
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.818
- Город:
- Барнаул
Если хотите, напишите мне в Skype, посмотрим по TeamViewer, что у вас там такое…
-
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
Хостинг работает на VPS может ли быть дело в этом?
Указывал конкретно:**Скрытое содержимое: доступно при наличии 1 постов.**
-
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.818
- Город:
- Барнаул
Так мы будем только гадать…
-
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
Решение было найдено.
FTP доступ был на папку cd в public_html.
Был создан FTP доступ на уровень выше и в названии папки поставлено только cd.
Теперь работает! -
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
После установки соединения следующий вопрос:
Как сделать так чтобы генерируемые .csv файлы которые находятся в папке на компьютере автоматически загружались в нужную папку на ftp заменяя файлы с таким же названием там?
Сделать это при запуске программы.
Насколько я успел узнать нужно сделать .bat файл и загрузить в программу.
Как он должен выглядеть, что содержать? -
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.818
- Город:
- Барнаул
Функции работы с FTP создавались для автозагрузки туда картинок и файлов, скачанных макросом DOWNLOADFILE.
Я могу лишь предложить дождаться нового макроса загрузки любых файлов с диска на FTP. По срокам ничего не могу сказать, но постараюсь сделать в ближайшие 1-2 недели… -
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
-
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
Уже можно использовать результат работ по созданию макроса загрузки любых файлов на FTP?
-
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.818
- Город:
- Барнаул
Здравствуйте.
Каюсь, но пока, увы, нет.
-
Kreol
Модератор
Команда форума
Модератор- Регистрация:
- 6 янв 2013
- Сообщения:
- 2.645
Если вам нужно загружать очень много файлов и больших объемов, загрузка через любой клиент будет намного быстрее. (filezilla, WinSCP)
-
nail
Member
Пользователи- Регистрация:
- 15 сен 2014
- Сообщения:
- 60
Zel-Gr хочет наверное все-таки, чтобы автоматом после парсинга новый CSV на хост загружался поверх старого, либо в дополнение к существующему csv.
А в самой CMS для импорта уже подхватываем CSV на выбор.
Было бы замечательно. Меньше телодвижений filezilla, WinSCP.:blush: -
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.818
- Город:
- Барнаул
А вот это уже поинтереснее! =)
Господин Zel-Gr, можно ли конкретизировать этот момент?
Спасибо! -
Zel-Gr
New Member
Пользователи- Регистрация:
- 16 июл 2014
- Сообщения:
- 10
Да, все верно насчет автоматом на хост с перезаписью.
Допустим имеется несколько поставщиков у магазина. После парсинга программой по каждому создается файл CSV с заданным названием и загружается на хост, перезаписывая старый. Далее скрипт, добавленный в CRON, берет в определенное заданное время поочереди все эти файлы и загружает в базу изменения.
Можно ли сделать так, чтобы после включения программы при нажатии одной кнопки парсилось по очереди несколько проектов?
Тогда весь процесс:
1. Включить программу
2. Запустить задание на парсинг нескольких проектов за небольшое время до времени заданного CRON -
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.818
- Город:
- Барнаул
Большое спасибо за информацию!
Для запуска очереди проектов используйте планировщик программы (соответствующая кнопка на панели инструментов главного окна программы).
С уважением к вам, Сергей.
-
kagorec
Администратор
Команда форума
АдминистраторСсылки недоступны для гостей -Ура обновление вышло, теперь можно контент грузить в любой движек (при обработчике на стороне сервера)!
Страница 1 из 2
Поделиться этой страницей
Я пытаюсь использовать макрос teraterm в vxworks
как это. имя файла = test-mbedtls.ttl
sendln 'cmd'
wait '[vxWorks]#'
sendln 'ftp x.x.x.x'
wait UsernamePrompt
(xxxx это мой ip)
но результат
Ошибка открытия: (подключение: errno = 0x3e)
когда я ввел вручную ftp xxxx в терминале teraterm, он работает хорошо.
но при использовании макроса всегда печатается Open fail
я неправильно использую макрос?
Решенная проблема… Устройство нехорошее, поэтому мне нужно подождать секунды. Добавляю паузу 3, работает хорошо.
2019-12-01 06:14