0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 39
|
||||||
1 | ||||||
VBS Копирование с USB в папку на компьютере, с проверками11.11.2017, 22:14. Показов 3067. Ответов 11
Метки нет (Все метки)
Попросили помочь в написании скрипта, а я сам не особо в этом шарю. Задача такова:
Определить, изменялась ли заданная пользователем папка за последний месяц. Если нет, скопировать в нее файлы со съемного носителя. Проверить наличие съемного носителя, вывести список имеющихся на ней файлов и удостовериться, что на рабочем диске достаточно места. Создать файл, записав туда тип диска, с которого выполнялось копирование и его метку. Файлу присвоить атрибут «Скрытый». Порылся по форуму, почитал немного литературу, и слепил такого Франкенштейна.
1. Проверка последнего использования папки в функции Age, скрипт нашёл на форуме, по идее проблем быть не должно; 2. Проверка наличия свободного места. Что думаете по этому поводу? 3. Проверка наличия съёмного носителя, находил на форуме, вроде вставил правильно. Но есть сомнения. 4. С записью в текстовый файл информации о флешке вроде не должно быть, но вот как затем его сделать скрытым... 5. Ну и собственно организовать копирование. Корректно ли я его сделал. Ну и при запуске выдаёт ошибку на последней строке. Ошибка: предполагается наличие инструкций
0
|
11.11.2017, 22:14 | |
Ответы с готовыми решениями:
11
Поиск на компьютере INI-файла и копирование найденного файла в папку определенного пользователя Будет ли работать быстрее флешка с USB 2.0, если подключить ее к разъему на компьютере USB 3.0? Будет ли работать принтер с USB 2.0 на компьютере с USB 1.1? Не могу отобразить папку .thumbnails на компьютере |
6333 / 2760 / 1071
Регистрация: 06.06.2017
Сообщений: 9,388
|
|
13.11.2017, 09:39 | 2 |
Eugene_BY
1-5. Дата модификации папки может вовсе не совпадать с датой модификации измёнённого последним объекта в её структуре. Поэтому логично рекурсивно просматривать и при соответствии копировать все объекты. С другой стороны, копирование изменённых объектов подразумевает замену, поэтому нужно предусмотреть опцию перезаписи или переименования по счётчику. Смысла записывать Age в функцию я не вижу. 2. Проще записать If .AvailableSpace > [bytes]. 3. Если нужно искать только USB-флеш-накопители (не SSD/HDD), то проще смотреть по if sDrive.DriveType = 1 And sDrive.IsReady. Если нужна конкретная флешка, то — по if sDrive.SerialNumber = [№] And sDrive.IsReady. 4. logFile.Attributes = logFile.Attributes Or 2 Добавлено через 18 часов 22 минуты Если вам есть что ответить, логично было бы написать здесь, а не цитировать меня на другом форуме и вести неполноценные беседы, так и не ответив на ключевые вопросы по поводу конкретной/любой флешки, способа указания/выбора источника/получателя, точного понимания организации копирования и т. п. После внесения ясности велика вероятность появления более конкретной помощи, коли самостоятельно решить вопрос не получается.
1
|
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 39
|
|
13.11.2017, 10:11 [ТС] | 3 |
Спасибо за подсказку. По поводу флешки, в задании на этот счёт никакой конкретики. Я думаю, любая подключаемая. Т.е. источник автоматически получается из подключаемой флешки. А вот получателя задаёт пользователь. И вот уточнение по поводу даты изменения не самой папки, а находящихся в ней файлов, думаю, всё же папку рассматривать, так как в задании уточнения нет. Чтобы не усложнять скрипт. Функцию я убрал. По поводу рекомендации к проверке наличия свободного места. Я думаю, стоит учитывать конкретный объём копируемого, и дать небольшой запас. Т.е. может оформить более красиво, но с той логикой, что у меня. По поводу копирования, думаю в цикле перебор всех файлов с копированием, и на случай наличия вложенных папок. Попробую сегодня переписать и показать, что у меня вышло.
И у меня почему-то на работе сервак не любит киберфорум, открывает сохранённые копии страниц. Но это уже к теме не относится.
0
|
6333 / 2760 / 1071
Регистрация: 06.06.2017
Сообщений: 9,388
|
|
13.11.2017, 11:27 | 4 |
Сообщение от Eugene_BY
Сообщение от Eugene_BY
Сообщение от Eugene_BY
P.S.: Насчёт сервака сомневаюсь. Другой браузер попробуйте.
0
|
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 39
|
|
13.11.2017, 13:49 [ТС] | 5 |
Всё же в сервере дело, дома и на мобильном Хром отображает нормально, а на работе ни Хром, ни Огнелис, ни IE не хотят.
Теперь по теме вопроса. Это лабораторная на заочке. Попросили помочь, мне стало интересно и взялся. Уточнил задание. Это именно флешка, копирование с любой подключаемой, как файлы в корне, так и папки с вложениями. Путь указывает пользователь в инпутбоксе, переменная tPath. Проверять именно папку по поводу даты изменения. Ну а замена файлов или переименование, это на усмотрение выполняющего задание. Надеюсь, время будет сегодня, показать, что получается у меня.
0
|
6333 / 2760 / 1071
Регистрация: 06.06.2017
Сообщений: 9,388
|
||||||
13.11.2017, 16:14 | 6 | |||||
Сообщение было отмечено Eugene_BY как решение
Решение
Плохое задание, если проверять нужно только дату модификации папки (даже не её размер, не говоря про содержимое).
Я уж было сам набросал более грамотный вариант, но раз всё так печально у "профессуры", что ж тут поделать. В любом случае сопоставлять со свободным местом нужно размер каждого годного файла, иначе в результате из-за разницы в размерах прерывание скриптом может не случиться или будет в ряде случаев несвоевременным. Ладно, хоть и не люблю помогать по домашкам, пусть будет как образец:
1
|
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 39
|
|
13.11.2017, 16:20 [ТС] | 7 |
В любом случае спасибо. Я ещё сам доделаю то, что задумал, и покажу, что вышло. А программы устаревшие, к сожалению, из того, что видел. Довелось повозиться со скрипом для выборки из БД и отображения в браузере. VBS эксплорером не поддерживается уже с винды 8.2, а в десятке и эксплорера нет. Пришлось на виртуалке делать.
0
|
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 39
|
||||||
15.11.2017, 00:55 [ТС] | 9 | |||||
Появилось время, немного покопался в своём скрипте. Из вашего скрипта использовал выбор пути к папке-получателю.
0
|
6333 / 2760 / 1071
Регистрация: 06.06.2017
Сообщений: 9,388
|
||||||
15.11.2017, 04:44 | 10 | |||||
1. Выбор пути надо полностью использовать — с 14-й строкой, иначе при отмене будет ругань.
2. И правильно ссылается. Set уберите. Это же не объект. 3. Пересмотрите drFree. /1024*1024 - это бессмыслица (арифметика, 2 класс). Лучше как у меня 34-38 строках сделать. Вместо FormatNumber проще Fix/Int/Round использовать:
1
|
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 39
|
||||||
16.11.2017, 00:29 [ТС] | 11 | |||||
Понял. Спасибо, буду дальше разбираться.
Добавлено через 16 часов 25 минут Добил скрипт, вот что у меня в итоге получилось:
0
|
6333 / 2760 / 1071
Регистрация: 06.06.2017
Сообщений: 9,388
|
|
16.11.2017, 12:27 | 12 |
Eugene_BY, пока не очень.
11 строка лишняя, в 10 достаточно добавить t перед Path. Насчёт drFree как мимо ушей пропустили. Неясно, зачем было разбивать всё на несколько процедур. Я же короткий путь показал без всяких On Error Resume Next и ненужных проверок. В 43 строке oFolderItem.Name на современных системах даёт не полное имя, а базовое. Поэтому это неверный способ получения расширения. К тому же в некоторых случаях IsFolder может давать True не только в отношении zip. Куда проще перебирать через FSO.GetFolder().SubFolders. 46-47, 57-59, 63-65, 74-76 объединяются. На 63 неверная запись. Должно быть так: If (oFile.Attributes And 1) = 1 Then Логика процедуры создания каталога мне вообще неясна. Если идёт работа с родительским каталогом, зачем его пытаться создать?
0
|
16.11.2017, 12:27 | |
16.11.2017, 12:27 | |
Помогаю со студенческими работами здесь
12
Как синхронизировать папку из OneDrive с папкой на компьютере? Копирование в сетевую папку Копирование файла в папку Копирование изображения в папку Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |