2017-08-25 71 views
0

バットファイルを実行している自動テストを1つ作成しました。このabc.batは、アプリケーション・アセンブラ・プラグインを使用して生成されます。バットファイルの中で、クラスパスが設定され、Javaコマンドが実行されています)。 Linuxでは、それがうまく働いていますが、Windows環境で、私はエラーになっています:バットファイルの実行中に入力行が長すぎる

に入力ラインは、バッチファイルが実行されてからのパスが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.bat ABC \のパスが含まれている私はいくつかの研究を行い、以下に示すように長いパスの問題は、グループポリシーを変更することで固定できることを発見した:

は、Windowsキー、タイプをヒットgpedit.mscと入力してEnterキーを押します。
ローカルコンピュータポリシー>コンピュータの構成>管理用テンプレート>システム>ファイルシステム
に移動し、win32の長いパスを有効にします。

これは私にとっては役に立ちません。私はWindows 10のエンタープライズを使用しています、OSのビルドは14393.1593です。

もう1つの方法はSubstコマンドを使用することです。手動でコマンドプロンプトを使用してドライブをマップすることができます。

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

「入力行が長すぎます」という問題はありません。これはこの問題を克服する良い方法ですか?プロセスビルダーを使用してこれを自動化する方法は?

答えて

1

Microsoftの文書 "Maximum Path Length Limitation"によると、そのパスはウィンドウの制限に達するのに十分な長さではありません。

「入力行が長すぎます」には、他の文字が含まれている必要があります。パラメータがbatファイルに渡されているか、パラメータがそのbatファイルの呼び出しに使用されている可能性があります。

実際に何が実行されているかを把握するには、Windowsでコマンドラインプロセスの監査を有効にします。 Command line process auditing

何とかその制限にぶつかり、パラメータの受け渡しが行われている場合は、ファイルに保存して読み込むことによって、その情報に到達する別の方法を見つけることをお勧めします。

関連する問題