Toplu komut dosyasıyla hatalı biçimlendirilmiş XML


0

Belirli bir yapı ve etiket düzenleme ile bir XML dosyası oluşturmak için aşağıdaki gibi bir toplu komut dosyası var.

@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

Şimdi girinti için gerektiğinde belirli miktarda yeni satırlar ve sekme karakterleri içeren aşağıdaki örnek XML kodu gibi bir XML dosyası oluşturmayı hedefliyorum, ayrıca yukarıdaki komut dosyasında gördüğünüz gibi toplu iş dosyalarında newline ve sekmeleri nasıl yazdıracağımı da biliyorum :

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

Ancak, XML dosyasını oluştururken, aslında her zaman aşağıdaki gibi kötü biçimlendirilmiş:

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

Birisi bana bunun neden olduğunu ve sadece parti kodu ve standartlarına göre nasıl çözüleceğini söyleyebiliyor mu?

Yanıtlar:


0

Önemli değil, çözümü kendi başıma toplu komut dosyası karakter baskı püf noktaları için googling tarafından çözdüm.

ENABLEDELAYEDEXPANSIONToplu komut dosyasında yolu kullanarak çözdüm.

Aynı soruna sahip olan birinin aşağıdaki betiği yararlı bulacağını umuyorum:

@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

Yukarıdaki betiği argümanlarla kullandıktan sonra: "Company1", "Module1", "local"; bu sırada, aşağıdaki XML belgesini oluşturdum:

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

Yine de teşekkürler. Birisi daha iyi, daha kısa bir yaklaşıma sahipse, buraya göndermekten çekinmeyin.


0

Tek bir sırada mı olmak zorunda? Cmd kullanarak, bu şekilde çizgi uzunluğu için sınırlamaya hızla geçebilirsiniz. Birden fazla satır kullanmak bir seçenek ise:

@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

Tek bir satır kullanmakta ısrar ediyorsanız, gecikmeli genişleme yeni satır karakteriyle birlikte zaten en basit yöntemdir. Eğer delayedexpansion kaçınmak istiyorsanız, ayrıca açıklandığı gibi, değişken ifade etmek başka yolları da vardır bu konuya .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.