Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 如何覆盖批处理变量的字符数限制?_Variables_Batch File_Character_Limit - Fatal编程技术网

Variables 如何覆盖批处理变量的字符数限制?

Variables 如何覆盖批处理变量的字符数限制?,variables,batch-file,character,limit,Variables,Batch File,Character,Limit,我对目前正在进行的项目有意见。 我必须将一个查询从一个文件存储到一个变量中,该变量的文件只包含一个查询(它是由程序的一部分生成的)。例如,我使用以下代码: set /p query=<path\to\my\folder\fileContainingQuery.soql set/p query=环境变量中可以存储的数据量是有限制的。理论上,最大长度为32767个字符,但批处理文件不能设置大于最大命令行长度(8192)的变量 您可以使用for/f命令来读取该行 for /f "useback

我对目前正在进行的项目有意见。 我必须将一个查询从一个文件存储到一个变量中,该变量的文件只包含一个查询(它是由程序的一部分生成的)。例如,我使用以下代码:

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

set/p query=环境变量中可以存储的数据量是有限制的。理论上,最大长度为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
sql.set.cmd
键入“path\to\my\folder\fileContainingQuery.soql”>>sql.set.cmd
调用sql.set.cmd
只有在最后一个命令行不是太大(在我的测试中是8186个字符)的情况下,这两种方法都会在变量中输入尽可能多的文本。在另一种情况下,不会检索到任何内容

但是,一旦检索到值,就必须在命令中使用is。在这里,同样的限制也发生了。8192是最大行长度,变量的内容在行内


因此,您对查询长度的最终限制小于此限制。

@MC ND:谢谢您的回答,我在仔细考虑之后,以这种方式使用了
for/f
命令。(此刻没有读到你的答案)


我对上一个问题的假设是set/p var函数可能只接受用户输入的1024个字符,并且由于我的查询文件只包含一行长度可能大于此限制,因此它会截断查询。上面的代码对我来说很好,我在变量中得到了完整的查询。

8191字节是CMD行缓冲区的最大长度。额外的字节是保留的。(注意,这似乎是操作系统16位版本的保留,因为这与最大值为65536的16位整数(0到65535,8个保留位)相匹配。)您可以直接将一组字符粘贴到命令行中进行检查,您会发现它每次截短的字符数正好为8191个。输入控制字符时需要保留字符,因此寄存器只能接受诸如EOL之类的字符。在任何情况下,如果设置变量或回显变量,则命令的文本将计为行长的一部分,因此实际上,您仅限于将变量设置或显示为8186(8191-5)个字符,因为执行SET或ECHO命令至少需要5个字符。对此稍加考虑,我找到了一种方法,可以在变量中设置和显示一个额外的字符,使变量中的字符总数达到8187个。您可以将“SET A=”存储在变量中,比如说“s”
SET“s=SET A=“
”,然后使用它来设置行,允许解释行上的更多字符。但是,即使您可以再写三个字符,也只会显示一个额外的字符。
(for /f "delims=" %%b in (path\to\my\folder\fileContainingQuery.soql) do (
    set query=%%b
))
echo %query%