У меня есть пакетный скрипт, как показано ниже, для создания файла XML с определенной структурой и расположением тегов.

@ECHO OFF
SET ROOTPATH=%~dp0
SET LINEBREAK=^^%NLM%%NLM%^%NLM%%NLM%
SET "TAB=   "
SET /p COMPANY="Company Name: "
SET /p MODULE="Module Name: "
SET /p CODEPOOL="Code Pool: "
ECHO ^<?xml version="1.0"?^>"%LINEBREAK%"^<config^>"%LINEBREAK%""%TAB%"^<modules^>"%LINEBREAK%""%TAB%""%TAB%"^<"%COMPANY%_%MODULE%"^>"%LINEBREAK%""%TAB%""%TAB%""%TAB%"^<active^>true^</active^>"%LINEBREAK%""%TAB%""%TAB%""%TAB%"^<codePool^>local^</codePool^>"%LINEBREAK%""%TAB%""%TAB%"^</"%COMPANY%_%MODULE%"^>"%LINEBREAK%""%TAB%"^</modules^>"%LINEBREAK%"^</config^>>"%ROOTPATH%app\etc\modules\%COMPANY%_%MODULE%.xml"
PAUSE

Теперь я собираюсь создать XML-файл, подобный приведенному ниже примеру XML-кода, с определенным количеством новых строк и символов табуляции, когда это необходимо для отступа, а также я знаю, как печатать новую строку и вкладки в пакетных файлах, как вы видели в приведенном выше сценарии. :

<?xml version="1.0"?>
<config>
    <modules>
        <Company_Module>
            <active>true</active>
            <codePool>community</codePool>
        </Company_Module>
    </modules>
</config>

Но когда я создаю файл XML, он на самом деле всегда плохо отформатирован, как показано ниже:

<?xml version="1.0"?>"^SET "TAB=    ""<config>"^SET "TAB=   """"<modules>"^SET "TAB=    """"""<"Company_Module">"^SET "TAB= """"""""<active>true</active>"^SET "TAB=    """"""""<codePool>local</codePool>"^SET "TAB=   """"""</"Company_Module">"^SET "TAB=    """"</modules>"^SET "TAB=   ""</config>

Может кто-нибудь сообщить мне, почему это происходит и как решить это только с помощью пакетного кода и стандартов?

2 ответа2

0

Неважно, я сам нашел решение по поиску трюков для печати символов в пакетном скрипте.

Я решил это с помощью ENABLEDELAYEDEXPANSION способом в пакетном скрипте.

Надеюсь, что любой, имеющий такую же проблему, найдет следующий скрипт полезным:

@ECHO OFF
SET ROOTPATH=%~dp0
SET \t= 
SET /p COMPANY="Company Name: "
SET /p MODULE="Module Name: "
SET /p CODEPOOL="Code Pool: "
(SET \n=^
%=DONT REMOVE THIS=%
)
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO ^<?xml version="1.0"?^>!\n!^<config^>!\n!%\t%^<modules^>!\n!%\t%%\t%^<%COMPANY%_%MODULE%^>!\n!%\t%%\t%%\t%^<active^>true^</active^>!\n!%\t%%\t%%\t%^<codePool^>local^</codePool^>!\n!%\t%%\t%^</%COMPANY%_%MODULE%^>!\n!%\t%^</modules^>!\n!^</config^>>%ROOTPATH%app\etc\modules\%COMPANY%_%MODULE%.xml
ENDLOCAL

После использования вышеуказанного скрипта с аргументами: "Company1", "Module1", "local"; в этом порядке я сгенерировал ниже XML-документ:

<?xml version="1.0"?>
<config>
    <modules>
        <Company1_Module1>
            <active>true</active>
            <codePool>local</codePool>
        </Company1_Module1>
    </modules>
</config>

Спасибо, в любом случае. Если у кого-то есть лучший, более короткий подход, не стесняйтесь размещать здесь.

0

Это должно быть в одной строке? Используя cmd, вы можете таким образом быстро ограничить длину строки. При использовании нескольких строк вариант:

@ECHO OFF
SET ROOTPATH=%~dp0
SET \t=   
SET /p COMPANY="Company Name: "
SET /p MODULE="Module Name: "
SET /p CODEPOOL="Code Pool: "

(
echo.^<?xml version="1.0"?^>
echo.^<config^>
echo.%\t%^<modules^>
echo.%\t%%\t%^<%COMPANY%_%MODULE%^>
echo.%\t%%\t%%\t%^<active^>true^</active^>
echo.%\t%%\t%%\t%^<codePool^>%CODEPOOL%^</codePool^>
echo.%\t%%\t%^</%COMPANY%_%MODULE%^>
echo.%\t%^</modules^>
echo.^</config^>
)>>%ROOTPATH%app\etc\modules\%COMPANY%_%MODULE%.xml

Если вы настаиваете на использовании одной строки, задержка с расширением в сочетании с символом новой строки уже является наиболее простым методом. Если вы хотите избежать задержки расширения, есть и другие способы выражения переменной, как описано в этой теме.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .