【问题标题】:从文本文件读取的批处理文件并连接错误:'输入行太长'
【发布时间】:2022-01-22 01:23:44
【问题描述】:

我正在尝试从 txt 文件中读取并连接批处理文件中的行。我遇到了一个意外错误。有没有办法绕过这个错误?

批处理文件:

@ECHO OFF 
TITLE Test File
ECHO Long Text Concat Test...

setlocal enableextensions enabledelayedexpansion
set count=1
set tables=
for /f "tokens=*" %%s in (TablesForTest.txt) do (  
  set tables=!tables! /p:TableData=%%s

  set /a count += 1
)
endlocal && set count=%count% && set tables=%tables%

echo count      : %count%
echo tables     : %tables%

PAUSE
EXIT

输出

The input line is too long.
The syntax of the command is incorrect.

文本文件内容

[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]
[dbo].[Long_Table_Name]

【问题讨论】:

  • cmd.exe 对一行中的字符数有限制,重要的是,变量环境中可以保存的字符数也有限制。对此的“绕过”是尝试为此任务使用或合并 Windows PowerShell 脚本。
  • @Compo 我在powershell中试过了,同样的错误出现了
  • serefbilge,您在问题中根本没有提到这一点,或者以任何方式暗示它。我目前无法读心。因此,我建议您 edit 您的问题标题、正文和标签,以便 PowerShell 特定成员资格可以帮助您解决 PowerShell 问题。
  • @Compo 我在你的建议之后尝试了 powershell,而不是之前。
  • cmd.exe中,行被限制为大约8190字节/字符,环境变量也是如此(包括它们的名称和=-符号,因为它们每个都像VAR=Value一样存储) …

标签: batch-file concatenation file-read


【解决方案1】:

您可以使用伪数组,每个表一个,而不是尝试构建一个大变量。

setlocal enableextensions enabledelayedexpansion
set count=0
for /f "tokens=*" %%s in (TablesForTest.txt) do (  
  set "table[!count!]=/p:TableData=%%s"
  set /a count+=1
)

echo count      : %count%
echo tables     :
for /L %%n in (0 0 !count!) DO (
   echo !table[%%n]!
)
endlocal

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多