Автозамена части строки в XML на имя родительского каталога
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Автозамена части строки в XML на имя родительского каталога
Здравствуйте. Прошу прощения за невнятное название темы - не смог написать покороче. Существует следующая задача:
В каталоге существует множество (20-200) подкаталогов. В каждом из них находятся какие-то файлы изображений (их трогать не надо) и один текстовый файл с расширением xml.
В этом текстовом файле необходимо найти и изменить некоторый набор символов (одинаковый у всех файлов xml) на название подкаталога, этот файл содержащего.
Везде обыскался, но решения найти не смог (кроме ковыряния вручную).
Подскажите, пожалуйста, какой-нибудь выход.
Заранее спасибо.
P.S. Смотрел здесь: Замена кусков текста в выделенных файлах, но мало чего понял.
[mod="Avada"]Оформил название смежной темы как нормальную ссылку. А прежний заголовок"Поиск и замена текста в выделенных файлах по списку" заменён другим, чтобы как раз не было путаницы с прежней темой.[/mod]
В каталоге существует множество (20-200) подкаталогов. В каждом из них находятся какие-то файлы изображений (их трогать не надо) и один текстовый файл с расширением xml.
В этом текстовом файле необходимо найти и изменить некоторый набор символов (одинаковый у всех файлов xml) на название подкаталога, этот файл содержащего.
Везде обыскался, но решения найти не смог (кроме ковыряния вручную).
Подскажите, пожалуйста, какой-нибудь выход.
Заранее спасибо.
P.S. Смотрел здесь: Замена кусков текста в выделенных файлах, но мало чего понял.
[mod="Avada"]Оформил название смежной темы как нормальную ссылку. А прежний заголовок"Поиск и замена текста в выделенных файлах по списку" заменён другим, чтобы как раз не было путаницы с прежней темой.[/mod]
Cyrus
Помимо указанной темы есть ещё ряд других, где приведены все рабочие варианты. Чтобы что-то понять по работе того или иного скрипта, надо в той же теме расписать последовательность действий, что получается, что нет. Если не ясно как работать со скриптами, кнопками и командами, то опять же ищем информацию по форуму, подобных вопросов было очень много. Ко всему прочему есть более десятка известных мне приложений, поддерживающий регэкспы и рекурсию, которые с лёгкостью с данной задачей справятся, но в любом случае надо расписать набор символов для поиска и замены.
Помимо указанной темы есть ещё ряд других, где приведены все рабочие варианты. Чтобы что-то понять по работе того или иного скрипта, надо в той же теме расписать последовательность действий, что получается, что нет. Если не ясно как работать со скриптами, кнопками и командами, то опять же ищем информацию по форуму, подобных вопросов было очень много. Ко всему прочему есть более десятка известных мне приложений, поддерживающий регэкспы и рекурсию, которые с лёгкостью с данной задачей справятся, но в любом случае надо расписать набор символов для поиска и замены.
Спасибо за ответ
Я честно пытался найти такое, но не преуспел. Обычно мне хватало scriptreplacer'а и akelpad'а, но здесь они не помогли.
Вы не могли бы назвать какое-нибудь бесплатное/полубесплатное приложение, в котором можно в поле замены задавать имя файла?Flasher писал(а):Ко всему прочему есть более десятка известных мне приложений, поддерживающий регэкспы и рекурсию
Я честно пытался найти такое, но не преуспел. Обычно мне хватало scriptreplacer'а и akelpad'а, но здесь они не помогли.
Автоматически.
То есть, выглядит вот так:
Изначально:
Должно получиться
Хотелось бы, чтобы поиском Alt+F7 находились нужные xml-файлы, а потом с ними можно было бы произвести не очень хитрые манипуляции (как при пакетном переименовании, к примеру).
То есть, выглядит вот так:
Изначально:
Код: Выделить всё
папка1\MI.xml (в нём есть выражение "просто_папка")
папка2\MI.xml (в нём есть выражение "просто_папка")
...
папкаN\MI.xml (в нём есть выражение "просто_папка")
Код: Выделить всё
папка1\MI.xml (в нём выражение "просто_папка" заменено на "папка1")
папка2\MI.xml (в нём выражение "просто_папка" заменено на "папка2")
...
папкаN\MI.xml (в нём выражение "просто_папка" заменено на "папкаN")Если есть рекурсия и маска, то поиск не требуется.
Не понятно зачем это в виде кода приводить, но суть была ясна.
Похоже тут всё-таки придётся подправлять один из существующих скриптов. Программы, где в качестве аргумента можно подбирать имена родидельских каталогов, может и есть, но я пока таких не припомню. В-общем, ждём у кого как со временем - результат точно будет.
Не понятно зачем это в виде кода приводить, но суть была ясна.
Похоже тут всё-таки придётся подправлять один из существующих скриптов. Программы, где в качестве аргумента можно подбирать имена родидельских каталогов, может и есть, но я пока таких не припомню. В-общем, ждём у кого как со временем - результат точно будет.
Попробуй
Код: Выделить всё
'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
Последний раз редактировалось Lev Вт апр 19, 2011 15:55, всего редактировалось 2 раза.
Lev
Спасибо за скрипт. Я его испробовал следующим образом.
Скопировал присланный Вами код в файл "replaceinfiles.vbs"
Заменил в нем "просто_папка" на "Хлупикино" (это и есть тот текст, который нужно заменить в xml на название родительских папок).
Сделал кнопочку
Нашёл и выделил файлы в папках через Ctrl+B
Нажал на эту кнопочку.
Появилось сообщение от Windows Script Host "Недопустимый путь".
Тестовые папки лежат по адресу: "C:\downloads\test\", то есть путь вроде допустимый.
Названия папок -
Боброво
Журы
Смыки
и т.д.
Не знаю, важно ли это, но в названиях папок будут пробелы, точки и дефисы.
Скажите, пожалуйста, что я делаю не так?
Спасибо за скрипт. Я его испробовал следующим образом.
Скопировал присланный Вами код в файл "replaceinfiles.vbs"
Заменил в нем "просто_папка" на "Хлупикино" (это и есть тот текст, который нужно заменить в xml на название родительских папок).
Сделал кнопочку
Код: Выделить всё
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
Нажал на эту кнопочку.
Появилось сообщение от Windows Script Host "Недопустимый путь".
Тестовые папки лежат по адресу: "C:\downloads\test\", то есть путь вроде допустимый.
Названия папок -
Боброво
Журы
Смыки
и т.д.
Не знаю, важно ли это, но в названиях папок будут пробелы, точки и дефисы.
Скажите, пожалуйста, что я делаю не так?
координаты в личке
--------------
На присланных файлах у меня всё работает.
Начинаем фантазировать:
Достаточно ли свежа версия Total Commander'а, чтобы поддерживать параметры %P%S?
Слово "Хлупикино" в скрипте написано без опечаток? (Надеюсь был Copy-Paste.)
Помогает ли переключение клавиатурной раскладки на русский перед запуском скрипта?
Соответствует ли путь Start path в параметрах скрипта реальному пути к скрипту? (В приведённом образце кнопки соответствует, но вдруг?) Что если закавычить Start path? Удалить его совсем?
--------------
На присланных файлах у меня всё работает.
Начинаем фантазировать:
Достаточно ли свежа версия Total Commander'а, чтобы поддерживать параметры %P%S?
Слово "Хлупикино" в скрипте написано без опечаток? (Надеюсь был Copy-Paste.)
Помогает ли переключение клавиатурной раскладки на русский перед запуском скрипта?
Соответствует ли путь Start path в параметрах скрипта реальному пути к скрипту? (В приведённом образце кнопки соответствует, но вдруг?) Что если закавычить Start path? Удалить его совсем?
Lev,
Попробовал то, что Вы написали.
Версия 7.50 (в её хелпе эти параметры упоминаются).
Раскладку менял (английский-русский) - не помогает.
"Путь запуска" проверил. "Закавычивал" и удалял - всё равно ничего не происходит.
Может быть, я не правильно его запускаю?
Я выделяю папки; нажимаю Ctrl+B; выделяю все файлы xml; жму на кнопочку скрипта.
При этом никаких сообщений не выдаётся, ничего не изменяется.
"Хлупикино" - менял на "abcdefg" в скрипте и в тестовых XML. Такой же результат.
P.S. Бэкапы тоже не создаются.
P.P.S. Вы не могли бы прислать Вашу кнопочку?
Попробовал то, что Вы написали.
Версия 7.50 (в её хелпе эти параметры упоминаются).
Раскладку менял (английский-русский) - не помогает.
"Путь запуска" проверил. "Закавычивал" и удалял - всё равно ничего не происходит.
Может быть, я не правильно его запускаю?
Я выделяю папки; нажимаю Ctrl+B; выделяю все файлы xml; жму на кнопочку скрипта.
При этом никаких сообщений не выдаётся, ничего не изменяется.
"Хлупикино" - менял на "abcdefg" в скрипте и в тестовых XML. Такой же результат.
P.S. Бэкапы тоже не создаются.
P.P.S. Вы не могли бы прислать Вашу кнопочку?