2011-08-05 10 views
0

例えば、私はmyscript.cmdを直接呼び出すことができます。または、他のスクリプトでmyscriptに行を置くことができます。シェルをコマンドラインや他のシェルから実行するときを区別することは可能ですか?

なぜなら、スクリプトを実行すると実行が停止するとすぐに消滅してしまいますので、結果が表示されないので、最後に@pauseを追加する必要がありますが、別のシェルコンソールウィンドウがそのように終了しないので、これは煩わしさを招きます。

私はこの問題に対処するために何らかの「if」条件を探します。

+2

はhttp://stackoverflow.com/questions/5859854を参照してください。/detect-if-bat-file-is-running-double-click-or-cmd-windowを介して – sakra

+1

うわー、面白いです。 env変数のリストに表示されないので、私は%cmdcmdline%を認識しませんでした。あなたの解決策、rsk82があります。 –

答えて

1

が、コンソールから起動したときに通常の方法を終了する:

@echo off 

echo Hello World! 

:: ...your ScriptCode... 

(((echo.%CMDCMDLINE%)|find /I "%~0")>NUL)&&pause 
+0

大変ありがとうございます。巧妙なハック。 – rsk82

0

自分で設定してみませんか?

MyScript.Cmdで
SET RUNNINGFROMOTHERSHELL=YES 
CALL MYSCRIPT.CMD 
SET RUNNINGFROMOTHERSHELL= 

IF "%RUNNINGFROMOTHERSHELL%"=="" GOTO NOPAUSE 
PAUSE 
:NOPAUSE 
+0

start-> runウィンドウからcmd.exeを起動するときに変数を手動で設定することは意味がありません。一時停止するよりも悪いです。たぶん私は両方の状況で異なる変数を探すべきですが、これを目的としたものはありません。 – rsk82

+0

スタート - >実行時は実行しません。それは一種のポイントです。ところで、環境変数はありません。それを試してみてください。 – Stu

+0

あなたは正しいと思いますが、実際にどのように動作するのか分かりません。どこでこの変数を設定しますか? MyScriptは私が実行するもので、エクスプローラでクリックするものですが、cmd.exeを実行してそこにあるフォルダにcdしてスクリプトを実行することもできますが、スクリプトを呼び出す箇所のanoterファイルに入れてください、どのファイル?それから、いつ呼び出すべきかを覚えておく必要があります。 – rsk82

1

あなたはスチューのような環境変数を作成していない限り、あなたがやりたいこといずれかを見つけるつもりはない、提案しました。プログラムを親プロセスに照会し、スクリプトがチェックできる値を返す小さなプログラムを書く必要があります。スタート - >実行している場合は、親はexplorer.exeになります。それ以外の場合は、cmd.exeまたはその他のexeファイルになります。

親プロセスを見つけるためのサンプルコードはhereです。ダブルクリック(またはそれにファイルをドロップすることによって)スクリプトが一時停止して取得するために

+0

どのプログラムでこのコードをコンパイルする必要がありますか? – rsk82

+0

Visual StudioはWindows上での通常の選択です。 –

+0

私は持っていません。それはお金がかかりますか?右 ? – rsk82

関連する問題