我正在处理当前项目的问题。 我必须将从文件存储的查询存储到变量中,该变量的文件只包含一个查询(它由程序的一部分生成)。例如,我使用以下代码:
set /p query=<path\to\my\folder\fileContainingQuery.soql
当查询不是那么长时它起作用,但是当它的长度超过1024个字符时,查询被截断,因为我必须使用FART工具将它发送到另一个配置文件,这是非常不方便的。
如何覆盖此问题?
答案 0 :(得分:4)
环境变量中可以存储的数据数量有限。理论上,最大长度为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的内容。
因此,查询长度的最终限制小于该值。
答案 1 :(得分:3)
@MC ND:谢谢你的回答,我在回想起之后用这种方式使用了for /f
命令。 (此刻没有看过你的答案)。
(for /f "delims=" %%b in (path\to\my\folder\fileContainingQuery.soql) do (
set query=%%b
))
echo %query%
我之前的问题的假设是set / p var函数可能只接受用户输入的1024个字符,并且因为我的查询文件只包含一行长度可能大于此限制,所以它会截断查询。上面的代码对我来说很好,我在变量中得到了完整的查询。