6

セットアップを「ワンクリック展開」に少し近づけるために、Groovy スクリプトを使用して、bat スクリプトによって制御される他のプロセスを開始/停止し、ファイルシステムのさまざまな部分やさまざまなマシンで実行したいと考えています。

これらのスクリプトを実行する方法と、それぞれの作業ディレクトリから実行する方法?

私はJavaを知っています

java.lang.Runtime's exec()

しかし、これには多くの問題があり、Groovy にもこれに対する何らかの省略表現があるのではないかと思いました。

ありがとう!

4

4 に答える 4

11

Groovy は execute() メソッドをプレーンな古い文字列に追加したので、これを試してください:

println "ls -la".execute().text
于 2009-08-26T13:18:15.530 に答える
9

execute() メソッドを使用してディレクトリを変更するには、「cmd /c」コマンドをプレフィックスとして付けてから、アンパサンド (Windows を想定) を使用してコマンドを連結します。

たとえば、サブディレクトリsubdirに移動し、そこからいくつかのバッチ ファイルを実行するとします。

println "cmd /c cd subdir & batch1.bat & batch2.bat".execute().text

より良い方法がないかどうかはわかりませんが、これはうまくいきます。

于 2009-08-29T00:58:09.677 に答える
1

また、java 5 で導入された驚くほど便利な Java クラスである ProcessBuilder を使用することもできます。

ProcessBuilder では、

  • 作業ディレクトリを決定する
  • プロセスが持つべき環境変数を決定する

簡単な例とその他のドキュメントについては、http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.htmlを参照してください。

于 2011-07-06T06:15:39.440 に答える
0

再利用可能なコードを作成することを恐れない場合は、.execute() プロセスをラップするオブジェクトを作成できます。私はこのようなものを作成し、定期的に使用しています。

次を使用して新しいプロセスを作成します。

def proc="cmd".execute()

その後、「consumeProcessOutput()」を使用して「proc」の入出力を管理できます。それに送信したものはすべて、シェルに入力したかのように処理され、そのシェルのすべての出力が利用可能になります。

これを行うことができるように、これらすべてをクロージャーにまとめました。

cmd("cd \\ \n dir ") {
    if(it.contains("AUTOEXEC.BAT"))
        それを印刷します。
    true を返します。
}

autoexec.bat 行のみを示す表示を取得するには。クロージャーから true を返すまで、そのプロセスの stdin が利用可能であるため、より多くのテキスト行を送信して無期限に操作できることに注意してください。

「cd」や「Dir」などのコマンドは.execute()を使用したウィンドウでは機能しないため、私はそれをかなり使用します。

def directoryListing=cmd("cd\\\ndir")

簡単にディレクトリのリストを表示してくれます。

于 2012-12-12T20:21:04.313 に答える