@gto6120

Bat, как сгенерировать xml?

В nexus font очень плохо работает поиск шрифтов, не может находить рекурсивно, даже при задании соответствующей директории в конфигурационном файле, поэтому необходимо генерировать xml вида:

<?xml version="1.0" encoding="UTF-8"?>
<library>
  <groups>
    <group name="fonts" expanded="true">
      <folder>H:\fonts\Akrobat</folder>
      <folder>H:\fonts\Amsdam Regular</folder>
      <folder>H:\fonts\Arkhip</folder>
    </group>
  </groups>
  <sets>
    <set name="готичесие"/>
    <set name="рисованные"/>
  </sets>
</library>

Собственно изменять нужно секцию group по мере добавления новых шрифтов в коллекцию (лежат в папке H:\fonts\). Хочу сделать батник под эту цель. Очень тяжело дается понимание этого перемудренного недоязыка. Пока смог лишь записать в файл что-то приближенно похожее. Вот скрипт:

@echo off
for /f %%a in ('dir /b /a:d /o:n "H:\fonts\*"') do (
echo "<folder>H:\fonts\%%a</folder>" >> library.xml
)
pause

Скрипт записывает вот что:

"<folder>H:\fonts\Akrobat</folder>" 
"<folder>H:\fonts\Amsdam</folder>" 
"<folder>H:\fonts\Anchor</folder>" 
...

Проблема #1: не должно быть кавычек вокруг тэгов folder, а записать без них вообще не получается.
Проблема #2: пробелы в названии шрифта приводят к тому, что берется лишь первое слово из названия, а названия должны быть с пробелами. В результате можно видеть, что Amsdam Regular стал просто Amsdam.
Проблема #3: я генерирую лишь ту секцию что мне нужна (group), а как ее потом в нужном месте вписать, заменив предыдущее значение не знаю.
  • Вопрос задан
  • 404 просмотра
Решения вопроса 1
@res2001
Developer, ex-admin
Проблема #1: если вы уберете кавычки, то символы < > будут вызывать ошибки, т.к. это служебные символы в батниках - символы перенаправления. Попробуйте их экранировать: ^> ^<
Попробуйте, может с экранированием прокатит. Вообще в батниках проблема с экранированием, порой нерешаемая. Я несколько раз сталкивался с тем, что проще было написать скрипт, например на javascript из-за проблемы с экранированием служебных символов.
Но у вас простой вариант, должно получиться. Я сейчас пока сам не могу проверить.
Проблема #2: Приведите цикл к такому виду:
for /f "tokens=* delims=" %%a in ('dir /b /a:d /o:n "H:\fonts\*"')
Проблема #3: Я бы предложил вам сделать 2 заготовки для результирующего xml - часть до вставки (header) и часть после вставки. После формирования вставки просто сложите 3 части таким образом:
copy header.xml+insert.xml+footer.xml library.xml
Либо и остальной xml так же генерируйте батником.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы