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 

Автозамена части строки в XML на имя родительского каталога
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
Cyrus



Joined: 12 Apr 2011
Posts: 11
Location: РФ

Post (Separately) Posted: Tue Apr 12, 2011 15:05    Post subject: Автозамена части строки в XML на имя родительского каталога Reply with quote

Здравствуйте. Прошу прощения за невнятное название темы - не смог написать покороче. Существует следующая задача:
В каталоге существует множество (20-200) подкаталогов. В каждом из них находятся какие-то файлы изображений (их трогать не надо) и один текстовый файл с расширением xml.
В этом текстовом файле необходимо найти и изменить некоторый набор символов (одинаковый у всех файлов xml) на название подкаталога, этот файл содержащего.

Везде обыскался, но решения найти не смог (кроме ковыряния вручную).
Подскажите, пожалуйста, какой-нибудь выход.

Заранее спасибо.


P.S. Смотрел здесь: Замена кусков текста в выделенных файлах, но мало чего понял.

 !  Avada:
Оформил название смежной темы как нормальную ссылку. А прежний заголовок"Поиск и замена текста в выделенных файлах по списку" заменён другим, чтобы как раз не было путаницы с прежней темой.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Apr 12, 2011 15:54    Post subject: Reply with quote

Cyrus
Помимо указанной темы есть ещё ряд других, где приведены все рабочие варианты. Чтобы что-то понять по работе того или иного скрипта, надо в той же теме расписать последовательность действий, что получается, что нет. Если не ясно как работать со скриптами, кнопками и командами, то опять же ищем информацию по форуму, подобных вопросов было очень много. Ко всему прочему есть более десятка известных мне приложений, поддерживающий регэкспы и рекурсию, которые с лёгкостью с данной задачей справятся, но в любом случае надо расписать набор символов для поиска и замены.
Back to top
View user's profile Send private message
Cyrus



Joined: 12 Apr 2011
Posts: 11
Location: РФ

Post (Separately) Posted: Tue Apr 12, 2011 16:17    Post subject: Reply with quote

Спасибо за ответ
Flasher wrote:
Ко всему прочему есть более десятка известных мне приложений, поддерживающий регэкспы и рекурсию

Вы не могли бы назвать какое-нибудь бесплатное/полубесплатное приложение, в котором можно в поле замены задавать имя файла?
Я честно пытался найти такое, но не преуспел. Обычно мне хватало scriptreplacer'а и akelpad'а, но здесь они не помогли.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Apr 12, 2011 16:34    Post subject: Reply with quote

Cyrus wrote:
в котором можно в поле замены задавать имя файла?
Так, стоп. Задавать автоматически или самостоятельно, как любой текст?
Back to top
View user's profile Send private message
Cyrus



Joined: 12 Apr 2011
Posts: 11
Location: РФ

Post (Separately) Posted: Tue Apr 12, 2011 16:47    Post subject: Reply with quote

Автоматически.
То есть, выглядит вот так:
Изначально:
Code:
папка1\MI.xml (в нём есть выражение "просто_папка")
папка2\MI.xml (в нём есть выражение "просто_папка")
...
папкаN\MI.xml (в нём есть выражение "просто_папка")

Должно получиться
Code:

папка1\MI.xml (в нём выражение "просто_папка" заменено на "папка1")
папка2\MI.xml (в нём выражение "просто_папка" заменено на "папка2")
...
папкаN\MI.xml (в нём выражение "просто_папка" заменено на "папкаN")


Хотелось бы, чтобы поиском Alt+F7 находились нужные xml-файлы, а потом с ними можно было бы произвести не очень хитрые манипуляции (как при пакетном переименовании, к примеру).
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Apr 12, 2011 17:03    Post subject: Reply with quote

Если есть рекурсия и маска, то поиск не требуется.
Не понятно зачем это в виде кода приводить, но суть была ясна.
Похоже тут всё-таки придётся подправлять один из существующих скриптов. Программы, где в качестве аргумента можно подбирать имена родидельских каталогов, может и есть, но я пока таких не припомню. В-общем, ждём у кого как со временем - результат точно будет. Wink
Back to top
View user's profile Send private message
Cyrus



Joined: 12 Apr 2011
Posts: 11
Location: РФ

Post (Separately) Posted: Tue Apr 12, 2011 17:07    Post subject: Reply with quote

Большое спасибо за положительную реакцию. Честно говоря, боялся, что отправят с прямо порога без объяснений.
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Tue Apr 12, 2011 18:32    Post subject: Reply with quote

Попробуй
Code:
'replaceinfiles.vbs
'Lev

'Параметры вызова
'wscript.exe "Диск:\Путь к скрипту\replaceinfiles.vbs"
'%P%S

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

Set args = WScript.Arguments

texttoreplace="просто_папка"

For Each f In args
  If fso.GetFile(f).Size<>0 Then
    Set ts = fso.GetFile(f).OpenAsTextStream(1, 0)
    st=ts.ReadAll
    ts.Close
    counter = 0
    If InStr(st, texttoreplace) Then
      counter = counter + 1
      '---бакап файла на всякий случай, закомментируй если не нужен
      fso.CopyFile f, fso.GetAbsolutePathName(f) & ".bak"
     
      Set ts = fso.GetFile(f).OpenAsTextStream(2, 0)
      ts.Write(Replace(st, texttoreplace, fso.GetFile(f).ParentFolder.Name))

      ts.Close
    End If
   End If
Next
Msgbox "Готово, кол-во найденных файлов - " & counter


Last edited by Lev on Tue Apr 19, 2011 15:55; edited 2 times in total
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Apr 12, 2011 19:25    Post subject: Reply with quote

Lev wrote:
texttoreplace="просто_папка"
Тут бы надо какой-то общий критерий.
+%L, +рекурсия по выделенным папкам. Конечно, можно Ctrl+B и фильтр по *.xml, но всё же было бы удобней работать с выделенными каталогами. Сейчас гляну рабочие варианты.
Back to top
View user's profile Send private message
Cyrus



Joined: 12 Apr 2011
Posts: 11
Location: РФ

Post (Separately) Posted: Wed Apr 13, 2011 11:32    Post subject: Reply with quote

Lev
Спасибо за скрипт. Я его испробовал следующим образом.
Скопировал присланный Вами код в файл "replaceinfiles.vbs"
Заменил в нем "просто_папка" на "Хлупикино" (это и есть тот текст, который нужно заменить в xml на название родительских папок).
Сделал кнопочку
Code:
TOTALCMD#BAR#DATA
wscript.exe "C:\Program Files\Total Commander\Utils\replaceinfiles.vbs
%P%S
C:\Program Files\Total Commander\Utils\allteamstrms_rep.ico

C:\Program Files\Total Commander\Utils\

-1

Нашёл и выделил файлы в папках через Ctrl+B
Нажал на эту кнопочку.
Появилось сообщение от Windows Script Host "Недопустимый путь".
Тестовые папки лежат по адресу: "C:\downloads\test\", то есть путь вроде допустимый.
Названия папок -
Боброво
Журы
Смыки
и т.д.
Не знаю, важно ли это, но в названиях папок будут пробелы, точки и дефисы.

Скажите, пожалуйста, что я делаю не так?
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Wed Apr 13, 2011 16:31    Post subject: Reply with quote

не вижу замыкающей кавычки в опциях кнопки - wscript.exe "C:\Program Files\Total Commander\Utils\replaceinfiles.vbs

потестировал на русских именах, пробелах и т.п. - у меня работает.
Back to top
View user's profile Send private message
Cyrus



Joined: 12 Apr 2011
Posts: 11
Location: РФ

Post (Separately) Posted: Wed Apr 13, 2011 16:52    Post subject: Reply with quote

Lev
Добавил кавычку (не дописал, простите).
Ошибку теперь не выдаёт, но в xml ничего всё равно не изменяет.
Lev, а можно Вам кинуть содержимое файла xml? Вы не могли бы у себя на нём проверить?
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Wed Apr 13, 2011 17:15    Post subject: Reply with quote

координаты в личке
--------------
На присланных файлах у меня всё работает.

Начинаем фантазировать:
Достаточно ли свежа версия Total Commander'а, чтобы поддерживать параметры %P%S?
Слово "Хлупикино" в скрипте написано без опечаток? (Надеюсь был Copy-Paste.)
Помогает ли переключение клавиатурной раскладки на русский перед запуском скрипта?
Соответствует ли путь Start path в параметрах скрипта реальному пути к скрипту? (В приведённом образце кнопки соответствует, но вдруг?) Что если закавычить Start path? Удалить его совсем?
Back to top
View user's profile Send private message
Cyrus



Joined: 12 Apr 2011
Posts: 11
Location: РФ

Post (Separately) Posted: Tue Apr 19, 2011 11:53    Post subject: Reply with quote

Lev,
Попробовал то, что Вы написали.
Версия 7.50 (в её хелпе эти параметры упоминаются).
Раскладку менял (английский-русский) - не помогает.
"Путь запуска" проверил. "Закавычивал" и удалял - всё равно ничего не происходит.
Может быть, я не правильно его запускаю?
Я выделяю папки; нажимаю Ctrl+B; выделяю все файлы xml; жму на кнопочку скрипта.
При этом никаких сообщений не выдаётся, ничего не изменяется.
"Хлупикино" - менял на "abcdefg" в скрипте и в тестовых XML. Такой же результат.
P.S. Бэкапы тоже не создаются.
P.P.S. Вы не могли бы прислать Вашу кнопочку?
Back to top
View user's profile Send private message
Cyrus



Joined: 12 Apr 2011
Posts: 11
Location: РФ

Post (Separately) Posted: Tue Apr 19, 2011 12:56    Post subject: Reply with quote

Lev,
А может быть такое, что wsсript.exe некорректно работает? Как это проверить?
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