View previous topic :: View next topic |
Author |
Message |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Thu Mar 22, 2012 14:52 Post subject: Переименование группы html файлов в имена внутрених ссылок |
|
|
Здравствуйте.
Возникла такая проблема: существует группа 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 - в имена ссылок, которые они содержат например: лучше без расширения..
Сразу поясню, стандартный метод экстракции url и последующего группового переименования не помогает: во многих случаях, после этого - возникает несовпадения имени файла и содержимого.
Проблема актуальна и встречается на некоторых сайтах, когда вместо отображаемой картинки, идет переадресация на htm или (html) файл с другим содержимым.(обычно встречается совпадение части имени, здесь-же, ни одной зацепки) Спасибо.
Last edited by shveicar on Thu Mar 22, 2012 21:19; edited 1 time in total |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Mar 22, 2012 16:20 Post subject: |
|
|
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 |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Thu Mar 22, 2012 16:53 Post subject: |
|
|
Большое Спасибо 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 |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Mar 22, 2012 22:59 Post subject: |
|
|
shveicar
У меня тут с сетевыми службами на одной машине проблемы, подключиться к инету не мог. Сейчас с другой пишу.
Прочитал с трудом. Опять те же грабли. Много написано, а конкретика уплывает.
Почему удобней будет добавлять к существующим именам, если сперва это не требовалось? Обычная нумерация при совпадении не устроит?
shveicar wrote: | Такое возможно осуществить? | А это уже вторая задача или другое решение исходной? |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Thu Mar 22, 2012 23:49 Post subject: |
|
|
Flasher wrote: | Почему удобней будет добавлять к существующим именам, если сперва это не требовалось? Обычная нумерация при совпадении не устроит? |
Обычная нумерация вполне устроит (когда, таких файлов много, не всегда сразу удается обнаружить внутри URL= совпадения). Более, в скрипте ничего менять не надо, разве что, там где есть - такая информация (/fold26/) пусть отобразится в имени файла, в виде(..fold26..)- (знак/ заменится на ..) Для быстрого анализа внутреннего содержимого таких(URL=) данный скрипт будет - весьма полезным инструментом. Спасибо, за проделанную работу.
Quote: | А это уже вторая задача или другое решение исходной? |
Изначально, пытался "простым" способом решить задачу (данный скрипт удобен, но до конца проблему не решает - это мой просчет ). Поэтому и спрашиваю, про возможность решения, с помощью более мощного скрипта.(тему создать не трудно, главное чтоб задание было выполнимым)... |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Mar 23, 2012 03:01 Post subject: |
|
|
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 |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Mar 23, 2012 03:38 Post subject: |
|
|
Flasher
Огромное Спасибо.. чудеса, но работает
Quote: | Если второй скрипт устраивает, то первый править уже не требуется? | Если это очень проблематично, то не стоит, ну а если возможно, то в качестве быстрого анализа внутреннего содержимого, (перед воздействием основного скрипта) -этот скрипт, был бы весьма кстати, мало-ли, чего-там в ссылках может быть...
Если будут одинаковые имена, - тогда стоит внимательно проверить эти ссылки. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Mar 23, 2012 04:15 Post subject: |
|
|
shveicar wrote: | Если это очень проблематично | Никаких проблем, добавил нумерование при совпадении. |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Mar 23, 2012 15:18 Post subject: |
|
|
Quote: | Никаких проблем, добавил нумерование при совпадении. |
Спасибо, - срабатывает, а с этим - Quote: | где есть - такая информация (/fold26/) пусть отобразится в имени файла, в виде(..fold26..)- (знак/ заменится на ..) | можно что-нибудь придумать? Поскольку , в данном варианте,- скрипт просто отбрасывает такие значения, Code: | URL=../имя/seg_1.jpg | оставляя только |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Mar 23, 2012 16:22 Post subject: |
|
|
shveicar
Так с нумерацией ошибок уже не будет. Или это нужно для информации? |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Mar 23, 2012 16:43 Post subject: |
|
|
Поясню: при переименовании (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 |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Mar 23, 2012 16:55 Post subject: |
|
|
shveicar wrote: | если это конечно можно осуществить? | Я уже начинаю понемногу уставать от таких "если".
Сделано. |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Mar 23, 2012 17:15 Post subject: |
|
|
Flasher
Вот теперь все замечательно, получились два очень удобных инструмента, (особенно, для тех кто занимается версткой)
Спасибо за помощь.
Больше вопросов и предложений - не имею.  |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Wed Nov 14, 2012 13:26 Post subject: |
|
|
Здравствуйте.
Flasher
Подскажите пожалуйста, - а как сделать так, чтобы скрипт понимал смешанные (Русско - Латино язычные) имена
пример: имя файла Code: | изображение номер1(images1).html |
переименование файла Code: | 2c4ab35b7c88c57e5ff4c15e2c409182.jpg |
С латиницей - справляется без проблем, а на смешанные имена ругается.
Спасибо. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Nov 14, 2012 17:35 Post subject: |
|
|
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 |
|
 |
|
|
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
|