2017-08-25 100 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

如果你在某種程度上達到了這個限制,並且參數傳遞正在發生,我建議找到一種不同的方式來獲取這些信息,可能是通過保存到文件中並從中讀取。