2017-11-23 33 views
0

私は非常に新しいので、最も簡単な形式に答えてください。バッチからtclを実行し、パスを変数として渡します。

バッチファイルでプロセスを設定しようとしています。このプロセスはtclを呼び出していくつかのファイルを探してからfinishに戻ります。

設定MYPATH = C:\the path that files are in\
そして、私が呼び出しています: - - > TCLコール>バッチへの復帰

私が持っている私のバッチファイルで

バッチ:それは次のようになります現在のところにあるtclは$MyPath$\MyTcl.tcl

ここまでうまくいきます。しかし、tclには、同じパス(MyPath)内のファイルを探しているプロセスがあり、同じ変数をどのように使用するかはわかりません(変数を渡します)。

助けが必要ですか?

事前に感謝します。

+0

間違った構文: '設定 "MYPATH = C:ファイルが\であるパス\" %MYPATH%\ MyTcsl.tcl'呼び出して' 'と – Stephan

答えて

1

Tclプロセスを何とかそのパスについて知っておく必要があります。

これは、暗黙的にまたは明示的に実行できます。生成されたTclインタプリタ プロセスが、いわゆる「現在の作業ディレクトリ」としてそれを継承します - :暗黙的にそれを行うには

方法は、「ファイルがである、パス\ C」に作業ディレクトリ を変更することです、 そしてそれは[pwd] command (又はプロセスの現在の作業ディレクトリ に根ざしたような経路がOSによって解決さ ためだけ相対パスを使用してファイルを参照実行 によって実行されたTclコードで照会することができます

これを行う明示的な方法は多くあります:

  • 「エクスポート」あなたのバッチスクリプト内の変数とあなたのTclコードに戻って それを読んで - "process environment block"いわゆるから。あなたのTclスクリプトで、あなたが::env(MyPath)変数を読み取ることによって、その 値にアクセスできるよう

    IIRC、Windows上でバッチスクリプトは、デフォルトですでにset 経由で作成されたすべてのvariblesをエクスポートします。 Hereはその動作です。

  • スクリプトのコマンドライン引数として渡します。

    これを実行するには、スクリプトを実際に のコマンドライン引数を読み取るように変更する必要があります。

    これは、::argc(コマンドライン引数の数) と::argv(これらの引数の値)グローバル変数を読み取ることによって行われます。 Hereはその動作です。

  • は、サブプロセス(例えば、プロセスの標準入力ストリームの一時ファイル経由かなどを介して) に任意のデータを通信するために、より複雑な方法が存在するが、彼らはこのような単純な場合にはあまりにも複雑で、それでは を探るないようにしましょう今のところこの方向。バッチの

関連する問題