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


70

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

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

关键是,当进程在Windows 2003 Server中运行时,还可以。没有错误。

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

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

提前致谢。


1
您是否将文件路径作为参数传递?如果是,则可以使用短名称。
npocmaka

1
您无法执行任何操作来使输入线超出Microsoft的规范长度。将参数写入参数文件中。NTFS上的短文件名可能被禁用。
Endoro

是的,我将文件路径作为参数传递,但是为什么在Windows 2003 Server上工作而不在2008上工作?bat文件是相同的。
卡洛斯·格罗西

查看规格。可能会有所不同。
Endoro

2
关闭控制台窗口并打开一个新窗口对我的情况
有所

Answers:


80

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

vcvarsall.bat不够聪明,只能将内容添加到 path如果它们还不存在,则添加了一堆重复条目。

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

if not defined DevEnvDir (
    call vcvarsall.bat
)

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


1
我在Visual Studio自定义构建步骤/事件中遇到了这些问题,在自定义构建步骤中使用“ set PATH = my_bin_dir;%path%”更新了路径变量,从而解决了该问题。
codekiddy 2015年

8
SETLOCAL在您的cmd脚本中,这始终是一种保护措施。
mojo

19

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

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


7

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

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

如果您注意到的话,我"在行尾有两个。这导致了我的问题(当我输入引号时,Notepad ++包含了它)。删除了,一切都很好。再次说明,这可能不是您的问题,但是如果其他任何人来寻找信息,但没有其他效果,请选中此复选框。:)


从行首和行尾都删除引号后,我的问题解决了
Abdul Rauf

6

有关此主题的Windows知识库文章。他们没有提到Windows 2008 Server,但确实提到了其他版本的OS在大小上的差异,因此2003与2008年之间存在差异也就不足为奇了。

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

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

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


1

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

结果取决于Windows,编辑器等的当前代码页。修理:

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

我使用HxD搜索并替换0xA00x20


0

我也遇到了这个。

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

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

我很好奇Cookie Butter的解决方案是否可以解决,并且潜在的问题是否相同。


是的,这是同样的问题。您可以认为这是一种解决方法,可以防止vcvarsall.bat文件无法防止多次对其自身的调用。我在解决方案中添加了警卫。
Cookie黄油

0

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

呼叫设置path = some \ path;%path%

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.