2017-12-18 172 views
0

我有以下代碼,獲取逗號分隔字符串的列表,用一些標記環繞它們並將輸出寫入文件。 行之有效的短名單,但對於長期(200串)名單,我得到一半的項目帶分割列表的字符串和環繞標記的批處理腳本限制

setlocal enabledelayedexpansion 
SET /p CS_VALUES=<%1 
SET TEMP_FILE="D:\tmp.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% 

所以對於輸入:A00000, A00001, .... , A00200 我會得到這樣的:

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

(停在一些變量< 200在該項目的中間)

我認爲它與某些限制有關,但無法弄清楚哪些以及如何擴展它(或者如果它不可能擴展 - 將是很好的k現在什麼是限制)

+2

['設置/P'](http://ss64.com/nt/set.html)限制一個字符串1021(!)個字符,所以這就是它被截斷的原因;通過['for /F'](http://ss64.com/nt/for_f.html)讀取文本文件將限制行數爲〜8190個字符。如果你有更長的行,不要使用批處理腳本... – aschipfl

+0

8k是偉大的,我將如何去改變我的代碼? – AlexD

+1

只需用下面的代碼替換SET/p CS_VALUES = <%1':'for/F'usebackq delims =「%% A in(」%〜1「)do set」CS_VALUES = %% A「' – aschipfl

回答

1

set /P command接受最高爲1021字/字節長度的文本行,這就是爲什麼你的文字成爲截斷。

若要接受更長的行,即大約8190個字符/字節,請改用for /F loop。在你的代碼,這意味着更換:

SET /p CS_VALUES=<%1 

通過:

for /F "usebackq delims=" %%A in ("%~1") do set "CS_VALUES=%%A" 
0

這是您的For /F選項示例。

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