【问题标题】:"Input line is too long" error in BAT FileBAT 文件中的“输入行太长”错误
【发布时间】:2021-08-06 10:55:55
【问题描述】:

我在执行 bat 文件时遇到问题。运行一段时间后,我收到“输入行太长”错误。

bat文件的结构很简单。有一个主 bat 文件调用 10 个其他 bat 文件,这些文件负责更新我的系统模块的数据。在更新数据 bat 文件中,有很多调用我的系统的命令(.cmd 文件),该命令负责通过一些计算更新数据。

关键是,当进程在 Windows 2003 Server 中运行时,一切正常。没有错误。

然后,当它升级到 Windows 2008 Server 时,我执行了主 bat 文件,几个小时后我得到了“输入行太长”的错误。我什至无法在该 cmd 窗口中手动执行更新数据中包含的任何命令。但是如果我关闭 cmd 窗口并打开一个新窗口,我可以执行命令而不会出错。

有人遇到过同样的问题吗?还是解决方案?

提前致谢。

【问题讨论】:

  • 您是否将文件路径作为参数传递?如果是,您可以使用短名称。
  • 您无法将输入行提前超过 Microsoft 规范的长度。将参数写入参数文件。 NTFS 上的短文件名可能被禁用。
  • 是的,我将文件路径作为参数传递,但为什么在 Windows 2003 服务器上工作而在 2008 上工作不工作? bat文件也是一样的。
  • 查看规格。它可能会有所不同。
  • 关闭控制台窗口并打开新窗口对我有帮助

标签: windows batch-file


【解决方案1】:

我在 cmd 窗口中执行构建脚本时遇到了同样的问题。大约 13 次后,我得到了同样的错误。构建脚本必须确保 vcvarsall.bat 已运行,因此它每次都执行 vcvarsall.bat。

vcvarsall.bat 不够聪明,只能在 path 不存在的情况下添加内容,因此添加了一堆重复的条目。

我的解决方案是对我知道由 vcvarsall.bat 设置的环境变量添加一个 if defined 检查...

if not defined DevEnvDir (
    call vcvarsall.bat
)

每次运行后检查你的路径环境变量,看看它是否在增长。如果是并且有重复项,您将需要聪明地向path 添加内容。有几种方法可以让它变得聪明。

【讨论】:

  • 我在 Visual Studio 自定义构建步骤/事件中遇到了这些问题,在自定义构建步骤中使用“set PATH=my_bin_dir;%path%”更新了路径变量,从而解决了问题。
  • 在您的 cmd 脚本中始终保护 SETLOCAL
【解决方案2】:

在多次运行同一组命令(停止/启动应用程序服务器)后,我第一次遇到此错误。

当我打开一个新的命令行并从新的命令行控制台尝试命令时,错误停止了。

【讨论】:

    【解决方案3】:

    这通常是由于路径较长而发生的。我已通过将 Kafka 的基本路径从 C:\Program Files 替换为 C:\Kafka

    【讨论】:

    • 这解决了我的卡夫卡问题:)
    【解决方案4】:

    我意识到这已经很老了,但我遇到的另一个问题是在我调用的命令末尾有一个"。我试图打电话:

    "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\..\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe""
    

    如果你注意到,我在行尾有两个"。这导致了我的问题(当我输入引号时,Notepad++ 包括它)。删除了,一切都好。同样,可能不是您的问题,但如果其他人来寻求信息并且没有其他工作,请检查此。 :)

    【讨论】:

    • 从行首和行尾删除引号后我的问题得到解决
    【解决方案5】:

    关于这个主题有一个Windows knowledge base article。他们没有提到 Windows 2008 服务器,但确实提到了其他操作系统版本之间的大小差异,因此 2003 年和 2008 年之间存在差异也就不足为奇了。

    至于问题的解决方案,他们的一些建议包括:

    • 修改需要长命令行的程序,使其使用包含参数信息的文件,然后在命令行中包含文件名。
    • 为文件夹和文件使用较短的名称。
    • 减少文件夹树的深度。

    如果您想了解他们还有什么要说的,您可以阅读整篇文章,但这些建议看起来最有可能适用于您。

    【讨论】:

      【解决方案6】:

      将文件夹名称重命名为 Kafka 。它对我来说很好。关闭 cmd 并重新启动它。那肯定会很好用!!

      之前:

      之后:

      【讨论】:

      • 哈!我来到这里是因为我在 Kafka 中遇到了这个错误。你怎么知道! :)
      【解决方案7】:

      在window下启动zookeeper也有同样的问题。根本原因是由于文件路径太长。我将 kafka 文件夹重新定位到更短的文件路径。例如:c:/kafka_2.13-2.6.0。然后 cd 到 bin/windows 并启动 zookeeper。它有效。

      【讨论】:

        【解决方案8】:

        如果文件中的空格(ansi 字符 0x20)确实是不间断空格(我有 0xA0,但您的可能会有所不同),也会发生这种情况。如果您从 Internet 复制/粘贴到支持 UTF-8 的编辑器,就会发生这种情况。

        结果取决于窗口的当前代码页、您的编辑器等。修复:

        1. 使用十六进制编辑器
        2. 看看空格是如何表示的
        3. 搜索并替换您的代表

        我使用HxD 搜索并将0xA0 替换为0x20

        【讨论】:

          【解决方案9】:

          多次使用 CALL 运行另一个设置 env 的批处理将增加您正在设置的 var 的值,因此在某些时候会出现错误

          调用 set path=some\path;%path%

          在cmd中多次运行上述命令会报错

          【讨论】:

          • 谢谢老兄,它解决了我使用 frmf2xml.bat 将 oracle 表单转换为 XML 的问题。
          【解决方案10】:

          当需要多次调用 vcvarscall.bat 时,则:

          setlocal
          vcvarsall.bat x64
          cl xxx.cpp
          endlocal
          
          setlocal
          vcvarsall.bat x86
          cl xxx.cpp
          endlocal
          

          【讨论】:

            【解决方案11】:

            我也遇到过。

            我试图运行 vcvars.bat,就像这里的其他人似乎在尝试一样。

            对我来说,潜在的问题似乎是我的 PATH 变量被重复的已经很长的路径污染了。修复我的路径似乎为我解决了这个问题(当然是在新终端中)。请注意,此修复并不特定于 vcvars.bat 或任何与 Visual Studio 相关的内容。

            我很好奇 Cookie Butter 的解决方案是否是一种变通方法,并且根本问题是否相同。

            【讨论】:

            • 是的,这是同一个问题。您可以将其视为解决 vcvarsall.bat 文件无法防止对其自身进行多次调用这一事实的解决方法。我在我的解决方案中添加了守卫。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-22
            • 1970-01-01
            • 2010-10-15
            • 2017-02-21
            • 2022-12-30
            相关资源
            最近更新 更多