Экспорт закладок Firefox в виде отдельных .URL с сохранением временных меток

4822
qwalter

У меня есть большое количество закладок Firefox, которые я хочу удалить и заархивировать как файлы ярлыков (.URL). Но я также хотел бы сохранить дату их добавления в качестве даты последнего изменения файлов .

Firefox хранит свои закладки с кучей метаданных, таких как дата добавления и последнего изменения в одном файле .json.

Что мне нужно сделать, это:

  1. Экспортируйте закладки из файла .json как отдельные .URLs
  2. Извлеките метаданные dateAdded и установите их в качестве даты последнего изменения файла .URL

Я не ожидаю, что какая-либо утилита будет иметь эту функцию, поскольку она очень специфична. Но я готов попробовать любую комбинацию инструментов, пока она работает

4

3 ответа на вопрос

6
nixda

Создание файлов .URL с сохранением отметки времени из любого браузера bookmarks.html

Этот макрос VBA позволяет преобразовать стандартный файл bookmarks.html (Firefox, Chrome, Opera) в несколько файлов .URL (Internet Explorer).

В качестве бонуса он считывает дату создания из ваших закладок и изменяет новые файлы .URL, чтобы отразить эту дату в проводнике Windows. Это также сохраняет вашу папку и структуру подпапок. Посмотрите на скриншот

enter image description here

использование

  • запустите нужный браузер и экспортируйте свои закладки в виде файла HTML .
    Каждый крупный браузер поддерживает эту возможность.
  • скачать и открыть соответствующую версию
  • Используйте эту красивую кнопку запуска
  • Excel запрашивает путь к вашему HTML-файлу, который вы создали на первом шаге
  • все новые файлы ярлыков хранятся в новой папке в том же месте, что и ваш HTML-файл
  • дата создания и изменения файла изменяются на соответствующую дату, когда вы впервые создали закладку в браузере

Как это устроено

  • макрос VBA открывает ваш HTML-файл как чистый текст в юникоде (специальные символы сохраняются)
  • он ищет строку за строкой «HREF =» и извлекает URL
  • он делает то же самое для добавленной даты и для используемого заголовка закладки в вашем браузере
  • он создает все подпапки в соответствии с вашей структурой закладок
  • он создает новый текстовый файл для каждой закладки и сохраняет следующие данные в этот файл
    [InternetShortcut] URL = HTTP: //www.someaddress.com/ 
  • файл сохранен как <bookmarktitle>.url
  • заголовок усекается до 100 символов, а все запрещенные символы удаляются.
  • он проверяет, существует ли ярлык, и если да, добавляет дату создания
  • данная дата UNIX преобразуется в читаемый формат
  • временные метки создания и изменения файла изменяются на дату, когда вы сохранили закладку в браузере

Полезные ссылки

Не могли бы вы [протестировать эту версию] (http://ge.tt/10CVnJV/v/0) и сказать, удовлетворяет ли она вашим потребностям. Он создает подпапки в соответствии с их аналогами в firfox. И это также проверяет, существует ли файл уже. если да, он добавляет add_date из файла закладок. nixda 11 лет назад 0
Вау .. этот действительно вышел за пределы qwalter 11 лет назад 0
Я попробовал, и все работает, это прекрасно. qwalter 11 лет назад 0
Еще раз, большое вам спасибо за помощь, вы выражаете мою глубокую благодарность. qwalter 11 лет назад 0
Пожалуйста, мне было весело nixda 11 лет назад 0
Эти файлы больше не доступны, к сожалению. Не могли бы вы также отделить VB от Excel, чтобы его можно было запустить из командной строки для тех из нас, кто придерживается LibreOffice? Dav 6 лет назад 0
2
nixda

Если вы просто хотите создать ярлык из любого браузера без сохранения временных меток, тогда это простой способ

  1. Экспортируйте свои закладки как файл HTML.
    Internet Explorer, Firefox, Chrome и Opera имеют встроенную возможность
  2. Введите Win+ Rи введите%USERPROFILE%\Favorites
  3. Временное резервное копирование всего содержимого где-то
  4. Откройте Internet Explorer → Файл → Импорт и экспорт. enter image description here
  5. Выберите ваш HTML-файл и импортируйте их
  6. Введите Win+ Rи введите %USERPROFILE%\Favoritesснова

Теперь у вас есть все закладки в виде простых файлов .URL. Вы можете переместить их куда угодно.
Internet Explorer не хранит закладки так же, как другие браузеры (в одном файле). Он просто создает файлы .URL для каждой закладки в папке «Избранное».

Примечание. Не забудьте удалить новые избранные элементы IE и восстановить их из резервной копии.

2
ClearBlueSky85

Вот код nixda для 2013 года, который был отредактирован для исправления пары опечаток и удаления даты последнего изменения, которая не была найдена в той же строке, что и гиперссылка в экспортированном html-файле из Google Chrome.

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

Private Sub CommandButton1_Click() Dim shortcutfile As String Dim myadddate As Double forbidden = Array("\", "/", ":", "*", "?", """", "<", ">", "|", "&quot;", "&amp;", "&#39;")  Application.ScreenUpdating = False ChDir ThisWorkbook.Path myfullfilename = Application.GetOpenFilename(fileFilter:="HTML Files, *.html")  If myfullfilename = False Then Exit Sub mypath = Left$(myfullfilename, InStrRev(myfullfilename, "\")) & "InternetShortCuts" & " " & Format(Now, "yyyy.mm.dd hh-mm-ss") Workbooks.OpenText FileName:=myfullfilename, Origin:=-535, DataType:=xlDelimited, Tab:=False, semicolon:=False, comma:=False, Space:=False  On Error Resume Next MkDir mypath On Error GoTo 0  Set mysheet = ActiveWorkbook.Sheets(1) With mysheet For i = 1 To .UsedRange.SpecialCells(xlCellTypeLastCell).Row  If InStr(UCase(.Cells(i, 1)), "<DT><H3 ADD_DATE=") <> 0 Then folderend = InStrRev(.Cells(i, 1), "<") folderstart = InStrRev(.Cells(i, 1), ">", folderend) newfolder = Mid(.Cells(i, 1), folderstart + 1, folderend - folderstart - 1)  For j = 0 To UBound(forbidden) newfolder = Replace(newfolder, forbidden(j), "") Next j  mypath = mypath & "\" & newfolder  On Error Resume Next MkDir mypath On Error GoTo 0 End If  If InStr(UCase(.Cells(i, 1)), "</DL><P>") <> 0 Then mypath = Left(mypath, InStrRev(mypath, "\") - 1) End If  If InStr(UCase(.Cells(i, 1)), "HREF=") <> 0 Then urlstart = InStr(.Cells(i, 1), "HREF=") urlend = InStr(.Cells(i, 1), "ADD_DATE=") myurl = Mid(.Cells(i, 1), urlstart + 6, urlend - urlstart - 8)  'adddateend = InStr(.Cells(i, 1), "LAST_") 'myadddate = Mid(.Cells(i, 1), urlend + 10, adddateend - urlend - 12) 'myadddate = DateAdd("s", myadddate, DateSerial(1970, 1, 1))  titleend = InStrRev(.Cells(i, 1), "<") titlestart = InStrRev(.Cells(i, 1), ">", titleend) mytitle = Mid(.Cells(i, 1), titlestart + 1, titleend - titlestart - 1) mytitle = Left(mytitle, 100)  For j = 0 To UBound(forbidden) mytitle = Replace(mytitle, forbidden(j), "") Next j  shortcutfile = mypath & "\" & Trim(mytitle) & ".url"  With CreateObject("Scripting.FileSystemObject") 'If .FileExists(shortcutfile) Then shortcutfile = mypath & "\" & Trim(mytitle) & " " & Format(myadddate, "yyyy.mm.dd hh-mm-ss") & ".url" If .FileExists(shortcutfile) Then shortcutfile = mypath & "\" & Trim(mytitle) & " " & ".url" With .CreateTextFile(shortcutfile,, True) .write "[InternetShortcut]" & vbNewLine .write "URL=" & myurl .Close End With End With  Call Settimestamp(shortcutfile, myadddate)  End If Next i  Close .Parent.Close False  End With  Application.ScreenUpdating = True End Sub 

Следующий модуль change_timestamp был изменен для исправления опечатки при объявлении функции CreateFileW, где lpFileName было объявлено как LongLong вместо Long в разделе # VBA7 и продолжение строки при объявлении функции CreateFileW в разделе #Else.

Option Explicit  Private Const OPEN_EXISTING = &H3 Private Const FILE_SHARE_READ = &H1 Private Const FILE_SHARE_WRITE = &H2 Private Const GENERIC_WRITE = &H40000000  Public Type FileTime dwLowDateTime As Long dwHighDateTime As Long End Type  Public Type SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer End Type  #If VBA7 Then Private Declare PtrSafe Function LocalFileTimeToFileTime Lib "kernel32" (lpLocalFileTime As FileTime, lpFileTime As FileTime) As Long Private Declare PtrSafe Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FileTime) As Long Private Declare PtrSafe Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long  Private Declare PtrSafe Function CreateFileW Lib "kernel32.dll" _ (ByVal lpFileName As Long, _ ByVal dwDesiredAccess As Long, _ ByVal dwShareMode As Long, _ ByVal lpSecurityAttributes As Long, _ ByVal dwCreationDisposition As Long, _ ByVal dwFlagsAndAttributes As Long, _ ByVal hTemplateFile As Long) As Long  Private Declare PtrSafe Function SetFileTimeCreate Lib "kernel32" Alias "SetFileTime" _ (ByVal hFile As Long, _ CreateTime As FileTime, _ ByVal LastAccessTime As Long, _ LastModified As FileTime) As Long #Else Private Declare Function LocalFileTimeToFileTime Lib "kernel32" (lpLocalFileTime As FileTime, lpFileTime As FileTime) As Long Private Declare Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FileTime) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long  Private Declare Function CreateFileW Lib "kernel32.dll" _ (ByVal lpFileName As Long, _ ByVal dwDesiredAccess As Long, _ ByVal dwShareMode As Long, _ ByVal lpSecurityAttributes As Long, _ ByVal dwCreationDisposition As Long, _ ByVal dwFlagsAndAttributes As Long, _ ByVal hTemplateFile As Long) As Long  Private Declare Function SetFileTimeCreate Lib "kernel32" Alias "SetFileTime" _ (ByVal hFile As Long, _ CreateTime As FileTime, _ ByVal LastAccessTime As Long, _ LastModified As FileTime) As Long #End If  '======================================================================================================================= '======================================================================================================================= '=======================================================================================================================  Function Settimestamp(FileName, FileDateTime)  Dim FileHandle As Long Dim Res As Long Dim ErrNum As Long Dim ErrText As String Dim tFileTime As FileTime Dim tLocalTime As FileTime Dim tSystemTime As SYSTEMTIME  With tSystemTime .wYear = Year(FileDateTime) .wMonth = Month(FileDateTime) .wDay = Day(FileDateTime) .wDayOfWeek = Weekday(FileDateTime) - 1 .wHour = Hour(FileDateTime) .wMinute = Minute(FileDateTime) .wSecond = Second(FileDateTime) End With  Res = SystemTimeToFileTime(lpSystemTime:=tSystemTime, lpFileTime:=tLocalTime) Res = LocalFileTimeToFileTime(lpLocalFileTime:=tLocalTime, lpFileTime:=tFileTime)  FileHandle = CreateFileW(lpFileName:=StrPtr(FileName), _ dwDesiredAccess:=GENERIC_WRITE, _ dwShareMode:=FILE_SHARE_READ Or FILE_SHARE_WRITE, _ lpSecurityAttributes:=ByVal 0&, _ dwCreationDisposition:=OPEN_EXISTING, _ dwFlagsAndAttributes:=0, _ hTemplateFile:=0)  Res = SetFileTimeCreate( _ hFile:=FileHandle, _ CreateTime:=tFileTime, _ LastAccessTime:=0&, _ LastModified:=tFileTime)  CloseHandle FileHandle  End Function