
특정 구조와 태그 배열을 사용하여 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
한 줄만 사용하려고 한다면 이미 새 줄 문자와 함께 지연된 확장을 사용하는 것이 가장 간단한 방법입니다. 지연된 확장을 피하려면 변수를 표현하는 다른 방법도 있습니다.이 스레드.