2017-08-25 865 views
0

我创建了一个运行bat文件的自动化测试。这个abc.bat是使用应用程序组装器插件生成的。在bat文件中,类路径已经设置并且Java命令已经执行)。在Linux上,它的正常工作,但在Windows环境下,我得到的错误:执行bat文件时输入行的问题太长了

输入线过长

从批处理文件执行的路径为C:\build\work\work1\abc\abc.bat。我必须保持这种路径,不能将其降低到喜欢C:\build\abc.bat

我正在使用进程生成器来运行此abc.bat文件。

public Test(Path wp, Path exe) throws IOException { 
builder = new ProcessBuilder() 
     .directory(wp.toFile()) 
     .command(wp.resolve(exe).toAbsolutePath().toString()) 
     .redirectOutput(Redirect.INHERIT) 
     .redirectError(Redirect.INHERIT); 

     builder.start(); 
} 

路径wp包含C:\ build \ work \ work1的路径。 (我从系统环境变量中获取这个路径)。 exe文件的路径包含ABC \ abc.bat

我做了一些研究,发现了长路径的问题可以通过改变组策略可以固定,如下图所示的路径:

命中Windows键,键入gpedit.msc并按Enter键。
导航到本地计算机策略>计算机配置>管理模板>系统>文件系统
并启用win32长路径。

这对我不起作用。我使用Windows 10企业版,操作系统版本为14393.1593。

另一种方法是使用Subst命令。手动我可以使用命令提示符一样映射驱动器:

C:\build> Subst X: “C:\build\work\work1” 
X:\>abc\abc.bat 

它工作正常,并且有没有问题“的输入行太长”。这是解决这个问题的好方法吗?以及如何使用流程生成器自动执行此操作?

回答

1

根据微软的文档“Maximum Path Length Limitation”,该路径不足以击中窗口限制。

“输入行太长”必须包含其他字符,可能传递给bat文件的参数或用于调用bat文件的参数。

为了更好地了解实际执行的内容,请在Windows中启用命令行进程审计。 Command line process auditing

如果你在某种程度上达到了这个限制,并且参数传递正在发生,我建议找到一种不同的方式来获取这些信息,可能是通过保存到文件中并从中读取。