View previous topic :: View next topic |
Author |
Message |
Cyrus
Joined: 12 Apr 2011 Posts: 11 Location: РФ
|
(Separately) Posted: Tue Apr 12, 2011 15:05 Post subject: Автозамена части строки в XML на имя родительского каталога |
|
|
Здравствуйте. Прошу прощения за невнятное название темы - не смог написать покороче. Существует следующая задача:
В каталоге существует множество (20-200) подкаталогов. В каждом из них находятся какие-то файлы изображений (их трогать не надо) и один текстовый файл с расширением xml.
В этом текстовом файле необходимо найти и изменить некоторый набор символов (одинаковый у всех файлов xml) на название подкаталога, этот файл содержащего.
Везде обыскался, но решения найти не смог (кроме ковыряния вручную).
Подскажите, пожалуйста, какой-нибудь выход.
Заранее спасибо.
P.S. Смотрел здесь: Замена кусков текста в выделенных файлах, но мало чего понял.
! | Avada: | Оформил название смежной темы как нормальную ссылку. А прежний заголовок"Поиск и замена текста в выделенных файлах по списку" заменён другим, чтобы как раз не было путаницы с прежней темой. | |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Apr 12, 2011 15:54 Post subject: |
|
|
Cyrus
Помимо указанной темы есть ещё ряд других, где приведены все рабочие варианты. Чтобы что-то понять по работе того или иного скрипта, надо в той же теме расписать последовательность действий, что получается, что нет. Если не ясно как работать со скриптами, кнопками и командами, то опять же ищем информацию по форуму, подобных вопросов было очень много. Ко всему прочему есть более десятка известных мне приложений, поддерживающий регэкспы и рекурсию, которые с лёгкостью с данной задачей справятся, но в любом случае надо расписать набор символов для поиска и замены. |
|
Back to top |
|
 |
Cyrus
Joined: 12 Apr 2011 Posts: 11 Location: РФ
|
(Separately) Posted: Tue Apr 12, 2011 16:17 Post subject: |
|
|
Спасибо за ответ
Flasher wrote: | Ко всему прочему есть более десятка известных мне приложений, поддерживающий регэкспы и рекурсию |
Вы не могли бы назвать какое-нибудь бесплатное/полубесплатное приложение, в котором можно в поле замены задавать имя файла?
Я честно пытался найти такое, но не преуспел. Обычно мне хватало scriptreplacer'а и akelpad'а, но здесь они не помогли. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Apr 12, 2011 16:34 Post subject: |
|
|
Cyrus wrote: | в котором можно в поле замены задавать имя файла? | Так, стоп. Задавать автоматически или самостоятельно, как любой текст? |
|
Back to top |
|
 |
Cyrus
Joined: 12 Apr 2011 Posts: 11 Location: РФ
|
(Separately) Posted: Tue Apr 12, 2011 16:47 Post subject: |
|
|
Автоматически.
То есть, выглядит вот так:
Изначально:
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 |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Apr 12, 2011 17:03 Post subject: |
|
|
Если есть рекурсия и маска, то поиск не требуется.
Не понятно зачем это в виде кода приводить, но суть была ясна.
Похоже тут всё-таки придётся подправлять один из существующих скриптов. Программы, где в качестве аргумента можно подбирать имена родидельских каталогов, может и есть, но я пока таких не припомню. В-общем, ждём у кого как со временем - результат точно будет.  |
|
Back to top |
|
 |
Cyrus
Joined: 12 Apr 2011 Posts: 11 Location: РФ
|
(Separately) Posted: Tue Apr 12, 2011 17:07 Post subject: |
|
|
Большое спасибо за положительную реакцию. Честно говоря, боялся, что отправят с прямо порога без объяснений. |
|
Back to top |
|
 |
Lev

Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Tue Apr 12, 2011 18:32 Post subject: |
|
|
Попробуй
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 |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Apr 12, 2011 19:25 Post subject: |
|
|
Lev wrote: | texttoreplace="просто_папка" | Тут бы надо какой-то общий критерий.
+%L, +рекурсия по выделенным папкам. Конечно, можно Ctrl+B и фильтр по *.xml, но всё же было бы удобней работать с выделенными каталогами. Сейчас гляну рабочие варианты. |
|
Back to top |
|
 |
Cyrus
Joined: 12 Apr 2011 Posts: 11 Location: РФ
|
(Separately) Posted: Wed Apr 13, 2011 11:32 Post subject: |
|
|
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 |
|
 |
Lev

Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Wed Apr 13, 2011 16:31 Post subject: |
|
|
не вижу замыкающей кавычки в опциях кнопки - wscript.exe "C:\Program Files\Total Commander\Utils\replaceinfiles.vbs
потестировал на русских именах, пробелах и т.п. - у меня работает. |
|
Back to top |
|
 |
Cyrus
Joined: 12 Apr 2011 Posts: 11 Location: РФ
|
(Separately) Posted: Wed Apr 13, 2011 16:52 Post subject: |
|
|
Lev
Добавил кавычку (не дописал, простите).
Ошибку теперь не выдаёт, но в xml ничего всё равно не изменяет.
Lev, а можно Вам кинуть содержимое файла xml? Вы не могли бы у себя на нём проверить? |
|
Back to top |
|
 |
Lev

Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Wed Apr 13, 2011 17:15 Post subject: |
|
|
координаты в личке
--------------
На присланных файлах у меня всё работает.
Начинаем фантазировать:
Достаточно ли свежа версия Total Commander'а, чтобы поддерживать параметры %P%S?
Слово "Хлупикино" в скрипте написано без опечаток? (Надеюсь был Copy-Paste.)
Помогает ли переключение клавиатурной раскладки на русский перед запуском скрипта?
Соответствует ли путь Start path в параметрах скрипта реальному пути к скрипту? (В приведённом образце кнопки соответствует, но вдруг?) Что если закавычить Start path? Удалить его совсем? |
|
Back to top |
|
 |
Cyrus
Joined: 12 Apr 2011 Posts: 11 Location: РФ
|
(Separately) Posted: Tue Apr 19, 2011 11:53 Post subject: |
|
|
Lev,
Попробовал то, что Вы написали.
Версия 7.50 (в её хелпе эти параметры упоминаются).
Раскладку менял (английский-русский) - не помогает.
"Путь запуска" проверил. "Закавычивал" и удалял - всё равно ничего не происходит.
Может быть, я не правильно его запускаю?
Я выделяю папки; нажимаю Ctrl+B; выделяю все файлы xml; жму на кнопочку скрипта.
При этом никаких сообщений не выдаётся, ничего не изменяется.
"Хлупикино" - менял на "abcdefg" в скрипте и в тестовых XML. Такой же результат.
P.S. Бэкапы тоже не создаются.
P.P.S. Вы не могли бы прислать Вашу кнопочку? |
|
Back to top |
|
 |
Cyrus
Joined: 12 Apr 2011 Posts: 11 Location: РФ
|
(Separately) Posted: Tue Apr 19, 2011 12:56 Post subject: |
|
|
Lev,
А может быть такое, что wsсript.exe некорректно работает? Как это проверить? |
|
Back to top |
|
 |
|