
ファイルへのパスを前提とするバッチ スクリプトを作成しました%1
。Windows エクスプローラーでドラッグ アンド ドロップ (ターゲット ファイルをバッチ スクリプト ファイルにドラッグ) してこのバッチ スクリプトを使用したい場合もあれば、既存のコマンド プロンプト ウィンドウからこのバッチ スクリプトを実行してパスを%1
明示的に指定したい場合もあります (通常は相対パスのみ)。
「ドラッグ アンド ドロップ」したときにスクリプトがすぐに消えてしまうのは望ましくないので、 が必要ですpause
。ただし、既存のコマンド プロンプト ウィンドウを使用するときに毎回 を押すのは望ましくないのでany key to continue
、 は望ましくありませんpause
。
両方の長所を活かす方法はあるでしょうか? 自分が置かれている状況を何らかの方法で検出/推測し、その後一時停止するかしないかを決めることはできるでしょうか? この場合の最善のアプローチは何でしょうか?
答え1
バッチ ファイルでこれを使用してみてください:
set arg0=%0
if [%arg0:~2,1%]==[:] pause
これは、0 番目の引数の 3 番目の文字 (基本的にはバッチ ファイル名自体) がコロンであるかどうかをチェックします。
通常、バッチ ファイルに何かをドラッグ アンド ドロップすると、次のように呼び出されます"Drive:\path\to\Batch File.bat" Arg1 Arg2 ...
。ただし、コマンド プロンプトからバッチ ファイルを実行する場合、通常は引用符で囲んだ絶対パスを使用してそのように呼び出すことはありません。したがって、この違いを利用して、pause
コロンが 3 番目の文字として存在する場合にのみ実行できます。これは、バッチ ファイルがドラッグ アンド ドロップによって実行されたことを意味します。もちろん、コマンド プロンプトからバッチ ファイルを実行するために引用符で囲んだ絶対パスを使用する場合は、当然pause
同様に実行されます。
答え2
cmd /k
スクリプトの最後に をスローします。既存のウィンドウではコマンド プロンプトに戻るだけで、新しいウィンドウでも同じことが行われ、ウィンドウは開いたままになります。
@echo off
echo "some text"
cmd /k
/k は次の印刷を停止することに注意してください:
Microsoft Windows [バージョン 6.1.7601] Copyright (c) 2009 Microsoft Corporation。無断複写・転載を禁じます。