在BAT文件中出现"输入行太长"错误

91

我在执行一个批处理文件时遇到了问题。运行一段时间后,我收到了“输入行太长”的错误。

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

关键是,当该过程在Windows 2003 Server中运行时,它很好。没有错误。

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

这个问题的解决方案是什么?


1
你是否将文件路径作为参数传递?如果是,你可以使用短名称。 - npocmaka
1
你无法通过 Microsoft 的规范来推进输入行的长度。请在参数文件中编写您的参数。NTFS 上的短文件名可能已被禁用。 - Endoro
2
关闭控制台窗口并打开新的窗口在我的情况下有所帮助。 - infografnet
我知道这很老,但你可以通过PowerShell运行命令行项,它没有cmd.exe的字符限制。 - djthoms
1
一个有超过100k次浏览量的十年老问题不应该被单个人关闭。 - jeb
显示剩余6条评论
12个回答

103

在命令行窗口中执行构建脚本时,我遇到了相同的问题。 大约重试了13次后,我得到了同样的错误。 构建脚本必须确保运行vcvarsall.bat文件,因此每次都会执行vcvarsall.bat文件。

vcvarsall.bat文件不聪明,无法判断是否已经将某些内容添加到path中,因此会添加大量重复项。

我的解决方案是在我知道由vcvarsall.bat文件设置的环境变量上添加if defined检查...

if not defined DevEnvDir (
    call vcvarsall.bat
)

每次运行后检查您的路径环境变量并查看它是否增长。如果是,并且存在重复项,则需要聪明地添加东西到path中。有几种聪明的方法可以做到这一点。


2
我在Visual Studio自定义构建步骤/事件中遇到了这些问题,通过在自定义构建步骤中更新路径变量为"set PATH=my_bin_dir;%path%",问题得以解决。 - codekiddy
11
在你的cmd脚本中使用SETLOCAL总是一种保护措施。 - mojo

26

这通常是由于路径过长导致的。我通过将Kafka的基本路径从C:\Program Files<Kafka_path> 替换为 C:\Kafka 来解决了此问题。


3
这解决了我的kafka问题 :) - Rafique Mohammed

25

我刚刚第一次遇到了这个错误,这是在多次执行相同的命令(停止/启动应用程序服务器)之后发生的。

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


解决了我的问题。不知道是什么原因引起的? - Fluffy Ribbit

9

我知道这篇文章相对比较旧了,但是我遇到的另一个问题是在我调用的命令结尾处有一个 " 符号。我试图调用以下命令:

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

请注意,我在该行末尾有两个"。这导致了我的问题(当我键入引号时,Notepad++将其包含在内)。去掉它,一切都好了。可能不是你的问题,但如果有其他人寻找信息而且没有其他方法可用,请检查这个。:)


1
在我的问题中,删除了行首和行尾的引号后,问题得到了解决。 - Abdul Rauf

7
将文件夹名称更改为Kafka。这对我来说运作良好。关闭命令行窗口并重新启动它。那肯定会正常工作!
之前: enter image description here 之后: enter image description here

哈!我来这里是因为在Kafka中出现了这个错误。你怎么知道的!:) - john k

6

这个主题有一篇Windows知识库文章。虽然他们没有提到Windows 2008服务器,但是他们提到了其他版本操作系统之间的差异,因此2003和2008之间可能存在差异也就不足为奇了。

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

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

如果您想了解更多内容,可以阅读整篇文章,但以上建议最有可能适用于您。


4

当需要多次调用vcvarscall.bat时,可以采取以下措施:

setlocal
vcvarsall.bat x64
cl xxx.cpp
endlocal

setlocal
vcvarsall.bat x86
cl xxx.cpp
endlocal

3

我也遇到了在Windows下启动Zookeeper的问题。根本原因是文件路径太长。我将Kafka文件夹重新定位到较短的文件路径,例如c:/kafka_2.13-2.6.0,然后进入bin/windows并启动Zookeeper。这样就可以正常工作了。


2
使用多次CALL运行另一个批处理文件来设置环境变量会增加您正在设置的变量的值,因此在某些时候会出现错误。
在cmd中多次运行上述命令将产生错误。

1
这也可能发生在您的文件中的空格(ansi字符0x20)实际上是不间断空格(我有0xA0,但您的可能不同)。如果您从互联网复制/粘贴到UTF-8感知的编辑器中,则可能会发生这种情况。结果取决于Windows的当前代码页、您的编辑器等。要解决问题,请执行以下操作:
  1. 使用十六进制编辑器
  2. 查看空格的表示方式
  3. 搜索和替换您的表示
我使用HxD0xA0替换为0x20

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接