1. ホーム
  2. batch-file

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

2023-07-19 23:50:09

質問

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

どのように解決するのですか?

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する必要があるんだ。 その操作を実行するために、他のディレクトリに 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 は、指定された引数のドライブとパスを与える。 指定された引数のドライブとパスを与えます。