배치 스크립트가 포함된 잘못된 형식의 XML

배치 스크립트가 포함된 잘못된 형식의 XML

특정 구조와 태그 배열을 사용하여 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>

누군가 이런 일이 발생하는 이유와 배치 코드 및 표준만으로 문제를 해결하는 방법을 알려줄 수 있습니까?

답변1

중요하지 않습니다. 배치 스크립트 문자 인쇄 트릭에 대한 인터넷 검색을 통해 스스로 솔루션을 알아냈습니다.

ENABLEDELAYEDEXPANSION배치 스크립트에서 way를 사용하여 해결했습니다 .

동일한 문제가 있는 사람이라면 누구나 아래 스크립트가 유용할 수 있기를 바랍니다.

@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>

어쨌든 감사합니다. 누군가가 더 좋고 더 짧은 접근 방식을 가지고 있다면 여기에 자유롭게 게시하십시오.

답변2

꼭 한줄에 있어야 하나요? 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

한 줄만 사용하려고 한다면 이미 새 줄 문자와 함께 지연된 확장을 사용하는 것이 가장 간단한 방법입니다. 지연된 확장을 피하려면 변수를 표현하는 다른 방법도 있습니다.이 스레드.

관련 정보