web-dev-qa-db-ja.com

コマンドライン.cmd / .batスクリプト、実行中のスクリプトのディレクトリを取得する方法

実行されたスクリプトのディレクトリを取得し、.cmdファイル内で使用するにはどうすればよいですか?

78
Brian R. Bondy

Raymond Chenにはいくつかのアイデアがあります。

https://devblogs.Microsoft.com/oldnewthing/20050128-00/?p=3657

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は、指定された引数のドライブとパスを提供します。

56
Kev

これは、スクリプトのパスと同等です。

%~dp0

これは、バッチパラメータ拡張構文を使用します。パラメータ0は常にスクリプト自体です。

スクリプトがC:\example\script.batに保存されている場合、%~dp0C:\example\と評価されます。

ss64.com には、パラメーター拡張構文に関する詳細情報があります。関連する抜粋は次のとおりです。

%の後にコマンドラインの数値位置を使用して、任意のパラメーターの値を取得できます。

[...]

パラメーターを使用してファイル名を指定する場合、次の拡張構文を適用できます。

[...]

%〜d1%1をドライブ文字のみに展開します-C:

[...]

%〜p1%1をパスのみに展開します。\utils \には、一部のコマンドでエスケープ文字として解釈される可能性のある末尾の\が含まれます。

[...]

上記の修飾子は組み合わせることができます:

%〜dp1%1をドライブ文字とパスのみに展開します

[...]

%0でバッチスクリプト自体のパス名を取得できます。これにパラメーター拡張を適用できるため、%〜dp0はバッチスクリプトにドライブとパスを返します。 W:\ scripts \

143
Landon
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d

pushd %curdir%

ソース

0
Alex. S.