Переименование группы html файлов в имена внутрених ссылок

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Переименование группы html файлов в имена внутрених ссылок

Сообщение shveicar »

Здравствуйте.
Возникла такая проблема: существует группа htm (html) файлов с именами вида:

Код: Выделить всё

videos_2f1414_2fseg_1.jpg.htm
videos_2f1418_2fseg_1.jpg.htm
videos_2f2326_2fseg_1.jpg.htm

их содержание:

Код: Выделить всё

<HTML><HEAD><META HTTP-EQUIV="Refresh" CONTENT="0; URL=seg_1_0373e7a7f7.jpg"><TITLE>302 File moved</TITLE></HEAD></HTML>
в данном случае в тегах меняются только значения

Код: Выделить всё

URL=seg_1_037fe7a7fb.jpg
URL=seg_1_0372e7a7f8.jpg
URL=seg_1_037ee7a7fc.jpg
Возможно ли, переименование исходных имен файлов htm - в имена ссылок, которые они содержат например:

Код: Выделить всё

seg_1_0373e7a7f7
лучше без расширения..
Сразу поясню, стандартный метод экстракции url и последующего группового переименования не помогает: во многих случаях, после этого - возникает несовпадения имени файла и содержимого.
Проблема актуальна и встречается на некоторых сайтах, когда вместо отображаемой картинки, идет переадресация на htm или (html) файл с другим содержимым.(обычно встречается совпадение части имени, здесь-же, ни одной зацепки) Спасибо.
Последний раз редактировалось shveicar Чт мар 22, 2012 21:19, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Код: Выделить всё

'==================================================================
' Переименовать выделенные htm(l)-файлы по URL-тегу в первой строке
' Параметры: %WL
'==================================================================
With WScript.Arguments : If .Count = 0 Then WScript.Quit
List = .Item(0) : End With : Const M = 1
With CreateObject("Scripting.FileSystemObject")
  For Each F in Split(.GetFile(List).OpenAsTextStream(1, -1).ReadAll, vbNewLine)
    If .FileExists(F) Then
      Ext = .GetExtensionName(F)
      If InStr("htm|html|hta", Ext) Then
        Set File = .GetFile(F)
        Line = File.OpenAsTextStream(1, -2).ReadLine : NN = InStr(Line, "URL=") + 4
        Name = Mid(Line, NN, InStrRev(Line, """>") - NN) : l = 0
        If InStr(Name, "..") = 1 Then Name = Mid(Name, 3)
        Name = .GetBaseName(Replace(Name, "/", "..")) & "." & Ext : FN = Name
        Do While .FileExists(.GetParentFolderName(F) & "\" & Name)
          l = l + 1
          If l < 10^M Then PFix = Right(String(M, "0") & l, M) Else PFix = l
          Name = .GetBaseName(FN) & " (" & PFix & ")." & .GetExtensionName(FN)
        Loop : File.Name = Name
      End If
     End If
  Next
End With
Последний раз редактировалось Flasher Пт мар 23, 2012 16:56, всего редактировалось 3 раза.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Большое Спасибо Flasher
Все ОК
Единственное, если есть похожее имена, вылетает ошибка (что файл существует), но это проблема "поставленной задачи" Да, если в внутренней ссылке адрес выглядит-

Код: Выделить всё

URL=../fold26/seg_1.jpg
то он преобразуется в(seg_1.jpg.htm) по идее информация (/fold26/) тоже должна сохраниться например:

Код: Выделить всё

..fold26..seg_1.jpg.htm 
две точки заменят каталог. Мой косяк - про такие имена, сразу не сказал.. Кстати подумал,- для удобства обработки таких ссылок ( videos_2f1414_2fseg_1.jpg.htm) в других документах, будет намного удобнее добавлять к существующему имени файла- его внутренюю ссылку, то есть- был файл

Код: Выделить всё

videos_2f1414_2fseg_1.jpg.htm
после воздействия скрипта стал

Код: Выделить всё

videos_2f1414_2fseg_1.jpg.htm.seg_1_037fe7a7fb.jpg
по идее и ошибок тогда не будет. Правда получается смена расширения, но можно в конец имени, добавлять исходное расширение начального файла (для дальнейшей обработки ссылки - это не существенно). Хотя, в данном случае, это только упростит ручную обработку.
На сколько реально осуществить такой вариант: Берем копируем в один каталог файлы htm (html) с ссылками на изображения, и сами изображения с именами указанными в ссылках. Выделяем все, применяем скрипт и имена изображений преобразуются в имена (htm)l файлов. Такое возможно осуществить?
Flasher Извиняюсь за изначально не корректно поставленную задачу, просто с таким сталкиваюсь в первые, - (обычно в именах и ссылках, имеется минимальная взаимосвязь). Долго ломал голову, и пришёл к тому, что только такой вариант возможен для автоматизации этой задачи. Спасибо.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Прочитал с трудом. Опять те же грабли. Много написано, а конкретика уплывает.
Почему удобней будет добавлять к существующим именам, если сперва это не требовалось? Обычная нумерация при совпадении не устроит?
shveicar писал(а):Такое возможно осуществить?
А это уже вторая задача или другое решение исходной?
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Flasher писал(а):Почему удобней будет добавлять к существующим именам, если сперва это не требовалось? Обычная нумерация при совпадении не устроит?

Обычная нумерация вполне устроит (когда, таких файлов много, не всегда сразу удается обнаружить внутри URL= совпадения). Более, в скрипте ничего менять не надо, разве что, там где есть - такая информация (/fold26/) пусть отобразится в имени файла, в виде(..fold26..)- (знак/ заменится на ..) Для быстрого анализа внутреннего содержимого таких(URL=) данный скрипт будет - весьма полезным инструментом. Спасибо, за проделанную работу.
А это уже вторая задача или другое решение исходной?
Изначально, пытался "простым" способом решить задачу (данный скрипт удобен, но до конца проблему не решает - это мой просчет :roll:). Поэтому и спрашиваю, про возможность решения, с помощью более мощного скрипта.(тему создать не трудно, главное чтоб задание было выполнимым)...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar
Создавать новую тему, думаю, не стоит. Специфика обеих задач узкая и лежит в одной области.

Код: Выделить всё

'========================================================================
' Переименовать базовые N-имена близлежащих файлов в базовые имена
' выделенных файлов с наличием в URL-теге их первой строки тех же N-имён

' Параметры: %WL <расширение N-файлов>
'========================================================================
With WScript.Arguments
  If .Count = 0 Then WScript.Quit
  List = .Item(0) : Ext = .Item(1)
End With
With CreateObject("Scripting.FileSystemObject")
  For Each F in Split(.GetFile(List).OpenAsTextStream(1, -1).ReadAll, vbNewLine)
    If .FileExists(F) Then
      Line = .GetFile(F).OpenAsTextStream(1, -2).ReadLine : NN = InStr(Line, "URL=") + 4
      FileName = .GetBaseName(Mid(Line, NN, InStrRev(Line, """>") - NN)) & "." & Ext
      .GetFile(.GetParentFolderName(F) & "\" & FileName).Name = .GetBaseName(F) & "." & Ext
    End If
  Next
End With
Если второй скрипт устраивает, то первый править уже не требуется?
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Flasher
Огромное Спасибо.. чудеса, но работает :)
Если второй скрипт устраивает, то первый править уже не требуется?
Если это очень проблематично, то не стоит, ну а если возможно, то в качестве быстрого анализа внутреннего содержимого, (перед воздействием основного скрипта) -этот скрипт, был бы весьма кстати, мало-ли, чего-там в ссылках может быть... :D
Если будут одинаковые имена, - тогда стоит внимательно проверить эти ссылки.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar писал(а):Если это очень проблематично
Никаких проблем, добавил нумерование при совпадении.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Никаких проблем, добавил нумерование при совпадении.
Спасибо, - срабатывает, а с этим -
где есть - такая информация (/fold26/) пусть отобразится в имени файла, в виде(..fold26..)- (знак/ заменится на ..)
можно что-нибудь придумать? Поскольку , в данном варианте,- скрипт просто отбрасывает такие значения,

Код: Выделить всё

URL=../имя/seg_1.jpg
оставляя только

Код: Выделить всё

seg_1.jpg
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar
Так с нумерацией ошибок уже не будет. Или это нужно для информации?
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Поясню: при переименовании (htm)l файлов, в имена их внутренних ссылок, попались несколько файлов, внутренние ссылки которых содержали имена

Код: Выделить всё

URL=../fold1/seg_1.jpg
URL=../fold26/seg_1.jpg
URL=../fold27/seg_1.jpg
после воздействия скрипта они превратились в

Код: Выделить всё

seg_1.jpg.htm
seg_1.jpg.htm(1)
seg_1.jpg.htm(2)
То-есть информация о каталогах была утеряна, конечно всегда можно заглянуть внутрь таких файлов и по одному проверить ссылки, но если таких файлов много, то для автоматизации, намного удобнее, когда информация появится "наверху", а переименование будет задействовано, только когда внутри (htm)l файлов будут действительно ссылки, на одни и те-же файлы, если это конечно можно осуществить?
Естественно, это изменение относиться только к первому скрипту.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar писал(а):если это конечно можно осуществить?
Я уже начинаю понемногу уставать от таких "если". :)
Сделано.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Flasher
Вот теперь все замечательно, получились два очень удобных инструмента, (особенно, для тех кто занимается версткой)
Спасибо за помощь.
Больше вопросов и предложений - не имею. :D
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Здравствуйте.
Flasher
Подскажите пожалуйста, - а как сделать так, чтобы скрипт понимал смешанные (Русско - Латино язычные) имена
пример: имя файла

Код: Выделить всё

изображение номер1(images1).html
переименование файла

Код: Выделить всё

2c4ab35b7c88c57e5ff4c15e2c409182.jpg
С латиницей - справляется без проблем, а на смешанные имена ругается.
Спасибо.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar
Должно работать. Пакет тестовых файлов прошу прикрепить.

Добавлено: В общем, чего и следовало ожидать, комбинация латиницы и кириллицы ни при чём. Проблема в существующих/несуществующих файлах.

Исправить пост не могу. Надо перед стокой c .GetFile .... вставить строки:

Код: Выделить всё

      PF = .GetParentFolderName(F) : If Not .FileExists(PF & "\" & .GetBaseName(F) &_
      "." & Ext) And .FileExists(PF & "\" & FileName) Then _
Последний раз редактировалось Flasher Чт ноя 15, 2012 16:47, всего редактировалось 1 раз.
Ответить