2011-08-01 5 views
1

動作しません。それは私がバッチファイルからのcleartoolのfindコマンドを起動しようと再び;-)ClearCaseがTclのスクリプトやバッチファイルとの組み合わせでコマンドを見つける:リダイレクションが

私です。そのバッチファイルはTclスクリプトから引数を取得します。

バッチファイル:

SET VERARG="version(\main\LATEST) && !lbtype(%3)" 
cleartool find . -version %VERARG% -print > Y:\x\Logs\%3.log 

のTclスクリプト:

set v_cmd "y:\\x\\clearcase_find_change.cmd $v_drive $v_path $v_label \n" 
set v_outp [exec cmd << $v_cmd] 

私は、コマンドラインからバッチファイルを起動すると、それが動作し、それがログ・ファイルへのヒットをwrotesが、私Tclから起動すると、ヒットがコマンドウィンドウに表示されますが、内容のないログファイルしか作成されません。私はそれを非常に単純なバッチファイルで既にテストしました。このファイルはエコーコマンドとリダイレクトだけを内容としています。それがうまくいって、別のドライブを使用しようとしましたが、成功しませんでした。私はバッチファイルの受け取った引数もチェックしましたが、すべてがうまく見えました。

働いたシンプルなコール、:

Batch: echo %1 > Y:\x\%2.log 
Tcl: set v_cmd "y:\\x\\simple_echo.cmd $v_lib $v_label \n" 

答えて

1

を多分それは、DOSセッションがを実行し、その後を終了する必要があることを指定するには、CMDディレクティブが欠落しています。

set v_outp [exec cmd << $v_cmd /c] 

か:

set v_outp [exec cmd /c << $v_cmd] 

または:

set v_cmd "/c y:\\x\\clearcase_find_change.cmd $v_drive $v_path $v_label \n" 
set v_outp [exec cmd << $v_cmd] 

/cが最初に渡されたことを確認する)

Tcl/Tk FAQを参照してください:

exec cmd.exe >&@stdout <@stdin /c dir  

は、現在のディレクトリのためのディレクトリコマンドを実行します。
cmd.exeのスイッチについては、Windowsのヘルプを参照してください。
"/c"は、コマンドを実行して終了するよう指示します。 "/k"は、コマンドを実行し、DOSコマンドインタプリタをアクティブに保つように指示します。
(cmd.exeのは、Windows NT上のMS-DOSのインタプリタの名前であることに注意してください。)

+0

可能性1と2もコマンドウィンドウを開くことはありませんが、可能性3は@Kai Tclエラー –

+0

を生成します。 OK。基本的には、 '/ c'オプション(シンプルで非ClearCaseに関連するTclスクリプトの単純なコマンド)の中で遊ぶ必要があります。それをClearCase(cleartool)cmdコマンドに適合させます。 – VonC

関連する問題