Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Переименование группы html файлов в имена внутрених ссылок
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Thu Mar 22, 2012 14:52    Post subject: Переименование группы html файлов в имена внутрених ссылок Reply with quote

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

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

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

URL=seg_1_037fe7a7fb.jpg
URL=seg_1_0372e7a7f8.jpg
URL=seg_1_037ee7a7fc.jpg

Возможно ли, переименование исходных имен файлов htm - в имена ссылок, которые они содержат например:
Code:
seg_1_0373e7a7f7
лучше без расширения..
Сразу поясню, стандартный метод экстракции url и последующего группового переименования не помогает: во многих случаях, после этого - возникает несовпадения имени файла и содержимого.
Проблема актуальна и встречается на некоторых сайтах, когда вместо отображаемой картинки, идет переадресация на htm или (html) файл с другим содержимым.(обычно встречается совпадение части имени, здесь-же, ни одной зацепки) Спасибо.


Last edited by shveicar on Thu Mar 22, 2012 21:19; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Mar 22, 2012 16:20    Post subject: Reply with quote

Code:
'==================================================================
' Переименовать выделенные 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


Last edited by Flasher on Fri Mar 23, 2012 16:56; edited 3 times in total
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Thu Mar 22, 2012 16:53    Post subject: Reply with quote

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

то он преобразуется в(seg_1.jpg.htm) по идее информация (/fold26/) тоже должна сохраниться например:
Code:
..fold26..seg_1.jpg.htm
две точки заменят каталог. Мой косяк - про такие имена, сразу не сказал.. Кстати подумал,- для удобства обработки таких ссылок ( videos_2f1414_2fseg_1.jpg.htm) в других документах, будет намного удобнее добавлять к существующему имени файла- его внутренюю ссылку, то есть- был файл
Code:
videos_2f1414_2fseg_1.jpg.htm
после воздействия скрипта стал
Code:
videos_2f1414_2fseg_1.jpg.htm.seg_1_037fe7a7fb.jpg
по идее и ошибок тогда не будет. Правда получается смена расширения, но можно в конец имени, добавлять исходное расширение начального файла (для дальнейшей обработки ссылки - это не существенно). Хотя, в данном случае, это только упростит ручную обработку.
На сколько реально осуществить такой вариант: Берем копируем в один каталог файлы htm (html) с ссылками на изображения, и сами изображения с именами указанными в ссылках. Выделяем все, применяем скрипт и имена изображений преобразуются в имена (htm)l файлов. Такое возможно осуществить?
Flasher Извиняюсь за изначально не корректно поставленную задачу, просто с таким сталкиваюсь в первые, - (обычно в именах и ссылках, имеется минимальная взаимосвязь). Долго ломал голову, и пришёл к тому, что только такой вариант возможен для автоматизации этой задачи. Спасибо.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Mar 22, 2012 22:59    Post subject: Reply with quote

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

Прочитал с трудом. Опять те же грабли. Много написано, а конкретика уплывает.
Почему удобней будет добавлять к существующим именам, если сперва это не требовалось? Обычная нумерация при совпадении не устроит?
shveicar wrote:
Такое возможно осуществить?
А это уже вторая задача или другое решение исходной?
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Thu Mar 22, 2012 23:49    Post subject: Reply with quote

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

Обычная нумерация вполне устроит (когда, таких файлов много, не всегда сразу удается обнаружить внутри URL= совпадения). Более, в скрипте ничего менять не надо, разве что, там где есть - такая информация (/fold26/) пусть отобразится в имени файла, в виде(..fold26..)- (знак/ заменится на ..) Для быстрого анализа внутреннего содержимого таких(URL=) данный скрипт будет - весьма полезным инструментом. Спасибо, за проделанную работу.

Quote:
А это уже вторая задача или другое решение исходной?

Изначально, пытался "простым" способом решить задачу (данный скрипт удобен, но до конца проблему не решает - это мой просчет Rolling Eyes). Поэтому и спрашиваю, про возможность решения, с помощью более мощного скрипта.(тему создать не трудно, главное чтоб задание было выполнимым)...
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Mar 23, 2012 03:01    Post subject: Reply with quote

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

Code:
'========================================================================
' Переименовать базовые 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


Если второй скрипт устраивает, то первый править уже не требуется?
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri Mar 23, 2012 03:38    Post subject: Reply with quote

Flasher
Огромное Спасибо.. чудеса, но работает Smile
Quote:
Если второй скрипт устраивает, то первый править уже не требуется?
Если это очень проблематично, то не стоит, ну а если возможно, то в качестве быстрого анализа внутреннего содержимого, (перед воздействием основного скрипта) -этот скрипт, был бы весьма кстати, мало-ли, чего-там в ссылках может быть... Very Happy
Если будут одинаковые имена, - тогда стоит внимательно проверить эти ссылки.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Mar 23, 2012 04:15    Post subject: Reply with quote

shveicar wrote:
Если это очень проблематично
Никаких проблем, добавил нумерование при совпадении.
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri Mar 23, 2012 15:18    Post subject: Reply with quote

Quote:
Никаких проблем, добавил нумерование при совпадении.

Спасибо, - срабатывает, а с этим -
Quote:
где есть - такая информация (/fold26/) пусть отобразится в имени файла, в виде(..fold26..)- (знак/ заменится на ..)
можно что-нибудь придумать? Поскольку , в данном варианте,- скрипт просто отбрасывает такие значения,
Code:
URL=../имя/seg_1.jpg
оставляя только
Code:
seg_1.jpg
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Mar 23, 2012 16:22    Post subject: Reply with quote

shveicar
Так с нумерацией ошибок уже не будет. Или это нужно для информации?
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri Mar 23, 2012 16:43    Post subject: Reply with quote

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

URL=../fold1/seg_1.jpg
URL=../fold26/seg_1.jpg
URL=../fold27/seg_1.jpg

после воздействия скрипта они превратились в
Code:

seg_1.jpg.htm
seg_1.jpg.htm(1)
seg_1.jpg.htm(2)

То-есть информация о каталогах была утеряна, конечно всегда можно заглянуть внутрь таких файлов и по одному проверить ссылки, но если таких файлов много, то для автоматизации, намного удобнее, когда информация появится "наверху", а переименование будет задействовано, только когда внутри (htm)l файлов будут действительно ссылки, на одни и те-же файлы, если это конечно можно осуществить?
Естественно, это изменение относиться только к первому скрипту.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Mar 23, 2012 16:55    Post subject: Reply with quote

shveicar wrote:
если это конечно можно осуществить?
Я уже начинаю понемногу уставать от таких "если". Smile
Сделано.
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri Mar 23, 2012 17:15    Post subject: Reply with quote

Flasher
Вот теперь все замечательно, получились два очень удобных инструмента, (особенно, для тех кто занимается версткой)
Спасибо за помощь.
Больше вопросов и предложений - не имею. Very Happy
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Wed Nov 14, 2012 13:26    Post subject: Reply with quote

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

переименование файла
Code:
2c4ab35b7c88c57e5ff4c15e2c409182.jpg

С латиницей - справляется без проблем, а на смешанные имена ругается.
Спасибо.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Nov 14, 2012 17:35    Post subject: Reply with quote

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

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

Исправить пост не могу. Надо перед стокой c .GetFile .... вставить строки:
Code:
      PF = .GetParentFolderName(F) : If Not .FileExists(PF & "\" & .GetBaseName(F) &_
      "." & Ext) And .FileExists(PF & "\" & FileName) Then _


Last edited by Flasher on Thu Nov 15, 2012 16:47; edited 1 time in total
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group