|
Компьютерный форум OSzone.net » Сфера Microsoft » Программное обеспечение Windows » Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания) |
|
Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания)
|
Новый участник Сообщения: 19 |
Профиль | Отправить PM | Цитировать Подскажите программку (или скрипт какой-то), которая может определить дату создания файла и судя по ней переместить файл в папку с названием "Дата создания файла".
Например: файл1.jpg - дата создания 3.05.2007 Нужно создать папку 03.05.2007 (или 2007.05.03) и скопировать туда "файл1.jpg". Пробовал искать по Инету - честно слово, ничего не нашел. А согласитесь, такая программа полезная. У меня фотки с камеры (Canon) когда сливаются на комп сразу по папкам сортируются. А вот на мобильном все файлы в одну папку скидываются и когда на комп перекинешь - то такой бардак Может тут есть программисты, для которых это не тяжело сделать А то я только очень начинающий. |
|
Отправлено: 22:10, 28-06-2007 |
Сообщения: 53404
|
Профиль | Отправить PM | Цитировать DIMM2005
Можно сделать vbs-скрипт примерно такого содержания: Dim FSO, FldN, Fls, Fl, DtN, FlN Set FSO = WScript.CreateObject("Scripting.FileSystemObject") If WScript.Arguments.Count = 0 Then MsgBox "Не задано имя папки для распределения файлов по датам. ", vbExclamation, "Ошибка" WScript.Quit End If FldN = WScript.Arguments(0) If Not FSO.FolderExists(FldN) Then MsgBox "Папка """ & FldN & """ не существует. ", vbExclamation, "Ошибка" WScript.Quit End If Set Fls = FSO.GetFolder(FldN).Files For Each Fl In Fls DtN = FSO.BuildPath(FldN, GetDateName(Fl.DateLastModified)) If Not FSO.FolderExists(DtN) Then FSO.CreateFolder DtN FlN = FSO.BuildPath(DtN, Fl.Name) If FSO.FileExists(FlN) Then FSO.DeleteFile FlN, True Fl.Move FlN Next MsgBox "Скрипт завершен. ", vbInformation, "Финиш" WScript.Quit Private Function GetDateName(Dt) Dim M, D M = Month(Dt) D = Day(Dt) If M < 10 Then M = "0" & M If D < 10 Then D = "0" & D GetDateName = Year(Dt) & "-" & M & "-" & D End Function Формат вызова: DTMove.vbs Имя_папки P. S. С контролем ошибок не заморачивался, так что использовать аккуратно. |
Отправлено: 12:48, 29-06-2007 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Petya V4sechkin
Спасибо! Все работает, сортирует как надо. Вроде проверял, при разных условиях - все ок... Я как понял скрипт берет дату изменения файла, а не создания, что впринципе мне и нужно. (т.к. при копировании на комп, дата создания меняется, а дата изменения - нет). Вот только маленький недочет. Скрипт заменяет одинаковые файлы (если имя совпадает и папка назначения). Хотя содержимое файла может быть разным. Я понимаю, в реальной жизни, такое врятли получится, но..... Можно как-то доработать скрипт, что если при сортировании, файл с таким именем уже существует, то переместить его в папку, например "Непонятное". Чтобы я потом посмотрел и лично все досортировал. |
Отправлено: 18:10, 29-06-2007 | #3 |
(*.*) Сообщения: 36520
|
Профиль | Сайт | Отправить PM | Цитировать Petya V4sechkin
Благодарю! |
------- Отправлено: 19:30, 29-06-2007 | #4 |
Сообщения: 53404
|
Профиль | Отправить PM | Цитировать Vadikan
Не за что ;) DIMM2005 Цитата:
Dim FSO, FldN, Fls, Fl, D, DtN, FlN Set FSO = WScript.CreateObject("Scripting.FileSystemObject") If WScript.Arguments.Count = 0 Then MsgBox "Не задано имя папки для распределения файлов по датам. ", vbExclamation, "Ошибка" WScript.Quit End If FldN = WScript.Arguments(0) If Not FSO.FolderExists(FldN) Then MsgBox "Папка """ & FldN & """ не существует. ", vbExclamation, "Ошибка" WScript.Quit End If Set Fls = FSO.GetFolder(FldN).Files For Each Fl In Fls D = GetDateName(Fl.DateLastModified) DtN = FSO.BuildPath(FldN, D) If Not FSO.FolderExists(DtN) Then FSO.CreateFolder DtN FlN = FSO.BuildPath(DtN, Fl.Name) If FSO.FileExists(FlN) Then If MsgBox("Файл """ & Fl.Name & """ уже существует в папке """ & D & """. " & vbCr & "Перезаписать?", vbQuestion + vbOKCancel, "Внимание") = vbOK Then FSO.DeleteFile FlN, True Fl.Move FlN End If Else Fl.Move FlN End If Next MsgBox "Скрипт завершен. ", vbInformation, "Финиш" WScript.Quit Private Function GetDateName(Dt) Dim M, D M = Month(Dt) D = Day(Dt) If M < 10 Then M = "0" & M If D < 10 Then D = "0" & D GetDateName = Year(Dt) & "-" & M & "-" & D End Function |
||
Отправлено: 19:39, 29-06-2007 | #5 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Спасибо! Лучше я бы и не мог придумать.
Petya V4sechkin Можешь толкать как комерческий продукт Ведь честно, в Инете ничего подобного не нашел. Только вот "фомат вызова: DTMove.vbs Имя_папки" не все могут понять Сегодня наверно тему в сети создам, многим этот скрипт понравится - авторство конечно за тобой Это я упомяну... |
Отправлено: 21:33, 29-06-2007 | #6 |
Сообщения: 53404
|
Профиль | Отправить PM | Цитировать DIMM2005
Цитата:
Цитата:
Конечно, лучше было бы сделать, чтобы при отсутствии параметра скрипт спрашивал путь к папке, но я об этом не подумал. |
||
Последний раз редактировалось Petya V4sechkin, 29-06-2007 в 22:03. Отправлено: 21:57, 29-06-2007 | #7 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Добрый день!
Подскажите как реализовать, сортировку файлов по папкам (по ВРЕМЕНИ создания, не по дате, т.е чтобы скрипт создавал новые папки по формату ЧЧ-ММ и туда сортировал файлы). |
Отправлено: 10:09, 18-11-2010 | #8 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Вопрос решен.
Может пригодится кому-нибудь.. Dim FSO, FldN, Fls, Fl, D, DtN, FlN Set FSO = WScript.CreateObject("Scripting.FileSystemObject") If WScript.Arguments.Count = 0 Then MsgBox "Не задано имя папки для распределения файлов по датам. ", vbExclamation, "Ошибка" WScript.Quit End If FldN = WScript.Arguments(0) If Not FSO.FolderExists(FldN) Then MsgBox "Папка """ & FldN & """ не существует. ", vbExclamation, "Ошибка" WScript.Quit End If Set Fls = FSO.GetFolder(FldN).Files For Each Fl In Fls D = GetTimeName(Fl.DateLastModified) DtN = FSO.BuildPath(FldN, D) If Not FSO.FolderExists(DtN) Then FSO.CreateFolder DtN FlN = FSO.BuildPath(DtN, Fl.Name) If FSO.FileExists(FlN) Then If MsgBox("Файл """ & Fl.Name & """ уже существует в папке """ & D & """. " & vbCr & "Перезаписать?", vbQuestion + vbOKCancel, "Внимание") = vbOK Then FSO.DeleteFile FlN, True Fl.Move FlN End If Else Fl.Move FlN End If Next MsgBox "Скрипт завершен. ", vbInformation, "Финиш" WScript.Quit Private Function GetTimeName(Dt) Dim H, M H = Hour(Dt) If H < 10 Then H = "0" & H M = Minute(Dt) If M < 10 Then M = "0" & M GetTimeName = CStr(H) & "-" & CStr(M) End Function |
Отправлено: 12:08, 18-11-2010 | #9 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Petya V4sechkin, обращаюсь к Вам за помощью.
Ситуация подобная той, которая описана ТС. Есть папка с большим кол-вом файлов вида: ffaa-1.jpg ffaa-2.jpg ffaa-3.jpg ggaa-1.jpg ggaa-2.jpg ggaa-3.jpg Нужно чтобы скрипт создал папку "ffaa" и запихнул в неё файлы ffaa-1.jpg, ffaa-2.jpg и ffaa-3.jpg. Аналогично со следующей группой файлов. Это реально ? |
Отправлено: 01:23, 30-10-2011 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Защита папок и файлов паролем - ограничение доступа к файлам и папкам | WChek | Программное обеспечение Windows | 18 | 22-09-2010 13:31 | |
CMD/BAT - [решено] Копирование самого позднего по дате создания каталога. | SANIOK_AV | Скриптовые языки администрирования Windows | 2 | 04-12-2009 17:29 | |
VBS/WSH/JS - [решено] VBS/WSH. Сортировка файлов по дате. | rancid | Скриптовые языки администрирования Windows | 3 | 23-07-2009 06:38 | |
Доступ - [решено] Копирование файлов из XP в Vista | cleverkid | Microsoft Windows Vista | 2 | 01-11-2008 11:19 | |
[решено] Копирование файлов при загрузке ОС | Coutty | Microsoft Windows 2000/XP | 9 | 02-05-2007 19:25 |
|