実行されたスクリプトのディレクトリを取得して、.cmdファイル内で使用するにはどうすればよいですか?
実行されたスクリプトのディレクトリを取得して、.cmdファイル内で使用するにはどうすればよいですか?
回答:
RaymondChenにはいくつかのアイデアがあります。
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
指定された引数のドライブとパスを提供します。
これは、スクリプトのパスと同等です。
%~dp0
これは、バッチパラメータ拡張構文を使用します。パラメータ0は常にスクリプト自体です。
スクリプトがに保存されているC:\example\script.bat
場合、はに%~dp0
評価されC:\example\
ます。
ss64.comには、パラメーター拡張構文に関する詳細情報があります。関連する抜粋は次のとおりです。
コマンドラインでの%とそれに続く数値位置を使用して、任意のパラメーターの値を取得できます。
[...]
パラメータを使用してファイル名を指定する場合、次の拡張構文を適用できます。
[...]
%〜d1%1をドライブ文字のみに展開します-C:
[...]
%〜p1%1をパスのみに展開します(例:\ utils \)。これには末尾の\が含まれ、一部のコマンドではエスケープ文字として解釈される場合があります。
[...]
上記の修飾子は組み合わせることができます。
%〜dp1%1をドライブ文字とパスのみに展開します
[...]
バッチスクリプト自体のパス名は%0で取得できます。これにパラメータ拡張を適用できるため、%〜dp0はドライブとパスをバッチスクリプトに返します(例:W:\ scripts \)。