windows - Batch scripting grænse med split liste af strenge og surround med tag

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har følgende kode, der får en liste over kommaseparerede strenge, omgiver dem med et tag og skriver output til en fil.
Fungerer godt for korte lister, men for lange (200 strenge) lister får jeg halvdelen


setlocal enabledelayedexpansion
SET /p CS\_VALUES=<\%1
SET TEMP\_FILE="D:	mp.txt"

>\%TEMP\_FILE\% ECHO:

FOR \%\%i in (\%CS\_VALUES\%) do (
    SET query="<quer:string>\%\%i</quer:string>"
    >>\%TEMP\_FILE\% ECHO !query:~1,-1!
)

ECHO \%TEMP\_FILE\%


Så for input: A00000, A00001, .... , A00200
Jeg vil få noget som:


<quer:string>A00000</quer:string>
<quer:string>A00001</quer:string>
<quer:string>A00002</quer:string>
....
<quer:string>A00</quer:string>


(stoppet ved nogle variable < 200 i midten af ​​det pågældende element)


Jeg antager, at det er relateret til en vis begrænsning, men kan ikke finde ud af, hvilken og hvordan jeg udvider den (eller hvis det ikke er muligt at udvide det - ville det være godt at vide, hvad der er begrænsningen)

Bedste reference




Kommandoen set /P accepterer en tekstlinje med en længde på op til 1021 tegn/byte, derfor bliver din tekst afkortet. [10]


For at acceptere længere linjer, nemlig sådan med ca. 8190 tegn/byte, skal du bruge en for /F loop i stedet. I din kode betyder dette at erstatte: [11]


SET /p CS\_VALUES=<\%1


Ved:


for /F "usebackq delims=" \%\%A in ("\%~1") do set "CS\_VALUES=\%\%A"

Andre referencer 1


Her er et eksempel på For /F for dig.


@Echo Off
>"D:	mp.txt" (For /F "UseBackQ Delims=" \%\%A In ("\%~1"
        ) Do Echo ^<quer:string^>\%\%~A^</quer:string^>)