Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Программное обеспечение Windows » Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания)

Ответить
Настройки темы
Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания)

Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Подскажите программку (или скрипт какой-то), которая может определить дату создания файла и судя по ней переместить файл в папку с названием "Дата создания файла".

Например:
файл1.jpg - дата создания 3.05.2007

Нужно создать папку 03.05.2007 (или 2007.05.03) и скопировать туда "файл1.jpg".

Пробовал искать по Инету - честно слово, ничего не нашел. А согласитесь, такая программа полезная. У меня фотки с камеры (Canon) когда сливаются на комп сразу по папкам сортируются. А вот на мобильном все файлы в одну папку скидываются и когда на комп перекинешь - то такой бардак

Может тут есть программисты, для которых это не тяжело сделать А то я только очень начинающий.

Отправлено: 22:10, 28-06-2007

 


Moderator


Сообщения: 53177
Благодарности: 15431

Профиль | Отправить 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
Сохранить с расширением .vbs, например DTMove.vbs.
Формат вызова:
DTMove.vbs Имя_папки

P. S. С контролем ошибок не заморачивался, так что использовать аккуратно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:48, 29-06-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 19
Благодарности: 0

Профиль | Отправить PM | Цитировать


Petya V4sechkin

Спасибо! Все работает, сортирует как надо. Вроде проверял, при разных условиях - все ок... Я как понял скрипт берет дату изменения файла, а не создания, что впринципе мне и нужно. (т.к. при копировании на комп, дата создания меняется, а дата изменения - нет).

Вот только маленький недочет. Скрипт заменяет одинаковые файлы (если имя совпадает и папка назначения). Хотя содержимое файла может быть разным. Я понимаю, в реальной жизни, такое врятли получится, но..... Можно как-то доработать скрипт, что если при сортировании, файл с таким именем уже существует, то переместить его в папку, например "Непонятное". Чтобы я потом посмотрел и лично все досортировал.


Отправлено: 18:10, 29-06-2007 | #3


(*.*)


Сообщения: 36491
Благодарности: 6675

Профиль | Сайт | Отправить PM | Цитировать


Petya V4sechkin
Благодарю!

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 19:30, 29-06-2007 | #4



Moderator


Сообщения: 53177
Благодарности: 15431

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо! Лучше я бы и не мог придумать.

Petya V4sechkin Можешь толкать как комерческий продукт Ведь честно, в Инете ничего подобного не нашел. Только вот "фомат вызова: DTMove.vbs Имя_папки" не все могут понять Сегодня наверно тему в сети создам, многим этот скрипт понравится - авторство конечно за тобой Это я упомяну...

Отправлено: 21:33, 29-06-2007 | #6



Moderator


Сообщения: 53177
Благодарности: 15431

Профиль | Отправить PM | Цитировать


DIMM2005
Цитата:
Можешь толкать как комерческий продукт :)
Хе-хе, в продукте 40 строчек кода :)

Цитата:
Только вот "фомат вызова: DTMove.vbs Имя_папки" не все могут понять :)
Типа, можно Drug & Drop :) Запускаем Проводник Windows и левой кнопкой мыши кидаем папку на скрипт.
Конечно, лучше было бы сделать, чтобы при отсутствии параметра скрипт спрашивал путь к папке, но я об этом не подумал.

Последний раз редактировалось Petya V4sechkin, 29-06-2007 в 22:03.


Отправлено: 21:57, 29-06-2007 | #7


Новый участник


Сообщения: 3
Благодарности: 1

Профиль | Отправить PM | Цитировать


Добрый день!
Подскажите как реализовать, сортировку файлов по папкам (по ВРЕМЕНИ создания, не по дате, т.е чтобы скрипт создавал новые папки по формату ЧЧ-ММ и туда сортировал файлы).

Отправлено: 10:09, 18-11-2010 | #8


Новый участник


Сообщения: 3
Благодарности: 1

Профиль | Отправить 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 
by Petya V4sechkin под редакцией AndVGri, Suprus
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:08, 18-11-2010 | #9


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить 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



Компьютерный форум OSzone.net » Сфера Microsoft » Программное обеспечение Windows » Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Защита папок и файлов паролем - ограничение доступа к файлам и папкам 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




 
Переход