ChatGPT解决这个技术问题 Extra ChatGPT

BAT 文件中的“输入行太长”错误

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

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

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

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

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

提前致谢。

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

O
Okkenator

在 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 的保护。
J
Jim Bethancourt

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

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


A
Amol Patil

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


这解决了我的卡夫卡问题:)
C
Cà phê đen

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

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

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


从行首和行尾删除引号后我的问题得到解决
J
James Holderness

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

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

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

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


s
shirley

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

https://i.stack.imgur.com/J6MsA.jpg

https://i.stack.imgur.com/rz3zF.jpg


哈!我来到这里是因为我在 Kafka 中遇到了这个错误。你怎么知道! :)
B
BgBgBgBsBsBs

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

setlocal
vcvarsall.bat x64
cl xxx.cpp
endlocal

setlocal
vcvarsall.bat x86
cl xxx.cpp
endlocal

S
Sriharsha g.r.v

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


i
ixe013

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

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

使用十六进制编辑器 查看空格的表示方式 搜索并替换您的表示

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


H
Hossam Houssein

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

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

在cmd中多次运行上述命令会产生错误


谢谢老兄,它解决了我通过使用 frmf2xml.bat 将 oracle 表单转换为 XML 的问题。
s
sg_man

我也遇到了这个。

我试图运行 vcvars.bat,因为这里的其他人似乎正在尝试。

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

我很好奇 Cookie Butter 的解决方案是否是一种解决方法并且潜在的问题是相同的。


是的,这是同一个问题。您可以将其视为 vcvarsall.bat 文件无法防止对其自身的多次调用这一事实的解决方法。我在我的解决方案中添加了警卫。