我在执行 bat 文件时遇到问题。运行一段时间后,我收到“输入行太长”错误。
bat文件的结构很简单。有一个主 bat 文件调用 10 个其他 bat 文件,这些文件负责更新我的系统模块的数据。在更新数据 bat 文件中,有很多对我系统的命令(.cmd 文件)的调用,该命令负责通过一些计算更新数据。
关键是,当进程在 Windows 2003 Server 中运行时,一切正常。没有错误。
然后,当它升级到 Windows 2008 Server 时,我执行了主 bat 文件,几个小时后我得到了“输入行太长”的错误。我什至无法在该 cmd 窗口中手动执行更新数据中包含的任何命令。但是如果我关闭 cmd 窗口并打开一个新窗口,我可以执行命令而不会出错。
有人有同样的问题吗?还是解决方案?
提前致谢。
在 cmd 窗口中执行构建脚本时,我遇到了同样的问题。大约 13 次后,我得到了同样的错误。构建脚本必须确保 vcvarsall.bat 已运行,因此它每次都执行 vcvarsall.bat。
vcvarsall.bat 不够聪明,只能在 path
不存在的情况下添加内容,因此添加了一堆重复的条目。
我的解决方案是在我知道由 vcvarsall.bat 设置的环境变量上添加一个 if defined 检查...
if not defined DevEnvDir (
call vcvarsall.bat
)
每次运行后检查你的路径环境变量,看看它是否在增长。如果存在并且存在重复项,则您需要明智地向 path
添加内容。有几种方法可以让它变得聪明。
在多次运行同一组命令(停止/启动应用程序服务器)后,我第一次遇到了这个错误。
当我打开一个新命令行并尝试来自新命令行控制台的命令时,错误停止了。
这通常是由于路径较长而发生的。我通过将 Kafka 的基本路径从 C:\Program Files
我意识到这已经很老了,但我遇到的另一个问题是在我调用的命令末尾有一个 "
。我试图打电话:
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\..\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe""
如果您注意到,我在行尾有两个 "
。这导致了我的问题(当我输入引号时,Notepad++ 包括它)。删除了,一切都好。同样,可能不是您的问题,但如果其他人来寻求信息并且没有其他工作,请检查此。 :)
关于这个主题有一个Windows knowledge base article。他们没有提到 Windows 2008 服务器,但确实提到了其他版本的操作系统之间的大小差异,因此 2003 和 2008 之间存在差异也就不足为奇了。
至于问题的解决方案,他们的一些建议包括:
修改需要长命令行的程序,使其使用包含参数信息的文件,然后在命令行中包含文件名。为文件夹和文件使用较短的名称。减少文件夹树的深度。
如果您想了解他们还有什么要说的,您可以阅读整篇文章,但这些建议看起来最有可能适用于您。
将文件夹名称重命名为 Kafka 。它对我来说很好。关闭 cmd 并重新启动它。那肯定会很好用!
https://i.stack.imgur.com/J6MsA.jpg
https://i.stack.imgur.com/rz3zF.jpg
当需要多次调用 vcvarscall.bat 时,则:
setlocal
vcvarsall.bat x64
cl xxx.cpp
endlocal
setlocal
vcvarsall.bat x86
cl xxx.cpp
endlocal
我有同样的问题在窗口下启动 Zookeeper。根本原因是由于文件路径太长。我将 kafka 文件夹重新定位到更短的文件路径。例如:c:/kafka_2.13-2.6.0。然后 cd 到 bin/windows 并启动 zookeeper。有用。
多次使用 CALL 运行另一个设置 env 的批处理将增加您正在设置的 var 的值,因此在某些时候会出现错误
调用 set path=some\path;%path%
在cmd中多次运行上述命令会产生错误
我也遇到了这个。
我试图运行 vcvars.bat,因为这里的其他人似乎正在尝试。
对我来说,潜在的问题似乎是我的 PATH 变量被重复的已经很长的路径污染了。修复我的路径似乎为我解决了这个问题(当然是在新终端中)。请注意,此修复并不特定于 vcvars.bat 或任何与 Visual Studio 相关的内容。
我很好奇 Cookie Butter 的解决方案是否是一种解决方法并且潜在的问题是相同的。
vcvarsall.bat
文件无法防止对其自身的多次调用这一事实的解决方法。我在我的解决方案中添加了警卫。
SETLOCAL
的保护。