82

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

4

3 に答える 3

152

これは、スクリプトのパスに相当します。

%~dp0

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

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

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

コマンド ラインで % の後に数値の位置を指定することで、任意のパラメータの値を取得できます。

[...]

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

[...]

%~d1 %1 をドライブ文字のみに展開 - C:

[...]

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

[...]

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

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

[...]

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

于 2008-09-24T21:38:33.567 に答える
58

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

于 2008-09-24T21:34:20.770 に答える
-1
for /F "eol= delims=~" %%d in ('CD') do set curdir=%%d

pushd %curdir%

ソース

于 2009-12-23T17:06:27.780 に答える