実行されたスクリプトのディレクトリを取得し、.cmd ファイル内で使用するにはどうすればよいですか?
3 に答える
これは、スクリプトのパスに相当します。
%~dp0
これは、バッチ パラメーター拡張構文を使用します。パラメータ 0 は常にスクリプト自体です。
スクリプトが に保存されている場合C:\example\script.bat
、 は と%~dp0
評価されC:\example\
ます。
ss64.comには、パラメーター拡張構文に関する詳細情報があります。関連する抜粋は次のとおりです。
コマンド ラインで % の後に数値の位置を指定することで、任意のパラメータの値を取得できます。
[...]
パラメータを使用してファイル名を指定する場合、次の拡張構文を適用できます。
[...]
%~d1 %1 をドライブ文字のみに展開 - C:
[...]
%~p1 %1 をパスのみに展開します。たとえば、\utils\ には、一部のコマンドでエスケープ文字として解釈される可能性がある末尾の \ が含まれます。
[...]
上記の修飾子は組み合わせることができます。
%~dp1 %1 をドライブ文字とパスのみに展開します
[...]
バッチ スクリプト自体のパス名は %0 で取得できます。パラメータ拡張をこれに適用できるため、%~dp0 はドライブとパスをバッチ スクリプトに返します (例: W:\scripts\)。
Raymond Chen にはいくつかのアイデアがあります。
https://devblogs.microsoft.com/oldnewthing/20050128-00/?p=36573
MSDN アーカイブは信頼性に欠ける傾向があるため、ここに全文を引用します。
簡単な方法は、
%CD%
疑似変数を使用することです。現在の作業ディレクトリに展開されます。
set OLDDIR=%CD%
.. do stuff ..
chdir /d %OLDDIR% &rem restore current directory
(もちろん、ディレクトリの保存/復元は / でより簡単に実行できたはず
pushd
ですpopd
が、それはここでは重要ではありません。)この
%CD%
トリックは、コマンド ラインからでも便利です。たとえば、操作したいファイルがあるディレクトリにいることがよくありますが...ああ、その操作を実行するには、他のディレクトリにchdirする必要があります。
set _=%CD%\curfile.txt
cd ... some other directory ...
somecommand args %_% args
%_%
(スクラッチ環境変数として使用するのが好きです。)と入力
SET /?
して、コマンド プロセッサによって提供される他の疑似変数を確認します。
また、記事のコメントは、たとえば次のようにスキャンする価値があります (コメントは古い記事から削除されているため、WayBack Machine 経由)。
http://blogs.msdn.com/oldnewthing/archive/2005/01/28/362565.aspx#362741
これは %~dp0 の使用をカバーしています:
バッチファイルの場所を知りたい場合:
%~dp0
%0
バッチファイルの名前です。~dp
指定された引数のドライブとパスを提供します。
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d
pushd %curdir%