2014-02-12 34 views
5

我在處理當前項目時遇到問題。 我必須從文件中獲取一個查詢到一個變量,其文件只包含一個查詢(它是由程序的一部分生成的)。如何覆蓋批量變量的字符數限制?

set /p query=<path\to\my\folder\fileContainingQuery.soql 

它工作時查詢並不長,但是當它的長度超過1024個字符,查詢被截斷,因爲我得將它發送到另一個配置文件中使用:比如我使用下面的代碼FART工具,這很不方便。

如何覆蓋此問題?

回答

2

有多少數據可以存儲在環境變量中有限制。理論上,最大長度爲32767個字符,但批處理文件不能設置比最大命令行長度(8192)更長的變量。

您可以使用for /f命令讀取線

for /f "usebackq delims=" %%f in ("path\to\my\folder\fileContainingQuery.soql") do set "q=%%f" 

或者你可以生成一個輔助批處理文件來查詢

<nul set/px=set q=>sql.set.cmd 
type "path\to\my\folder\fileContainingQuery.soql">>sql.set.cmd 
call sql.set.cmd 

的內容分配,都將得到最大可能的只有當最後的命令行不太大時(我的測試中有8186個字符),纔會將文本寫入變量。在其他情況下,沒有任何檢索。

但是,一旦檢索到值,就必須在命令中使用。而這裏也發生了相同的侷限。 8192是行內最大行長度和變量IS的內容。

因此,您對查詢長度的最終限制小於此值。

2

@MC ND:感謝您的回答,我在回想起之後以這種方式使用了for /f命令。 (此時沒有閱讀你的答案)。

(for /f "delims=" %%b in (path\to\my\folder\fileContainingQuery.soql) do (
    set query=%%b 
)) 
echo %query% 

我對我以前的問題假設是集/ P VAR功能可能只接受用戶輸入1024個字符,並作爲我的查詢文件只包含一個線,其長度可能會超過此限制時,它截斷查詢。上面的代碼適合我,並且我在變量中獲得了完整的查詢。

+0

非常感謝。它也適用於我。 – picnic4u