現在実行されているバッチスクリプトを含むディレクトリを取得します


30

%0バッチファイルで使用して、バッチファイルのディレクトリを取得しますが、結果は次のとおりです。

c:\folder1\folder2\batch.bat

このように、バッチファイル名なしのディレクトリだけが必要です。

c:\folder1\folder2\

どうすればいいですか?たぶん、パスをフィルタリングする必要があります。はいの場合、どうすればいいですか?


コマンドラインの一部としてバッチファイルで%0を使用する場合は、%0 \ .. \ RestOfStuffを使用する必要があります。二重ドットは、ファイル名を超えてそれを取り戻します。
ジョンガーデニアーズ

現在実行されているスクリプトを含むディレクトリは、現在の作業ディレクトリ(CD)と必ずしも同じではありません!それに応じて質問を編集しました-「現在のディレクトリ」という用語を避けるようになりました。
chiccodoro

回答:


52
%~p0

パスのみを返します。

%~dp0

ドライブとパスを返します。

この件に関する詳細情報は、Microsoftのサイトにあります。

この構文に関する情報は、Windows OSで実行するforコマンドのヘルプにも記載されていますfor /?


2
別の参照ソースとして、入力すると同じ変数置換のリストも表示されますfor /?
ケビン

%〜dp0は、実行中のバッチファイルのディレクトリを示します。バッチファイルが別のディレクトリにある場合、他のディレクトリを取得します。%CD%は常に現在のディレクトリを提供します。
ミハイダニラ

@MihaiDanila、いいえ、それはOPが尋ねたものではありません。
バート・デ・ヴォス

実際、現在のディレクトリを取得する方法を探しているときに、この質問に答えました。これはGoogleでの最初のヒットでした。タイトルは明らかに現在のディレクトリを示していますが、コンテンツについては正しいです。私たちはどちらも正しいが、私は、意図していたことにもかかわらず、質問が実際に何を伝えているのかについて、私はより正しいと思う。それが私が横たわる答えをアップした理由です...質問のタイトルは、質問自体と同期するように名前を変更する必要があります。
ミハイダニラ

1
おそらく、リンクが有効で、それ以上であるため、リンク内の記事のタイトルは、供給されていない可能性が.....
Rupsingh Mathwale

16

現在のディレクトリは%CD%に保持されています


4
%CD%は、バッチファイルが存在する場所ではなく、そこからバッチを実行するパスを復元します
モハンマドAL-Rawabdeh

4
@Mohammad:確かに、それは現在のディレクトリです。もう1つは、バッチファイルがあるディレクトリです。これら2つは同じではなく、あなたの質問はこの1つを明示的に求めています。それがあなたが意味するものでない場合、それを編集してください。
ジョーイ

%CD%は、バッチファイルの現在のパスを返しますが、管理者としてバッチファイルを実行すると失敗します。管理者としてバッチファイルを実行すると、System32のパスが返されます。したがって、より良いオプションは、完全なパスに%〜dp0を使用することです

%〜dp0は、実行中のバッチファイルのディレクトリを示します。バッチファイルが別のディレクトリにある場合、他のディレクトリを取得します。%CD%は常に現在のディレクトリを提供します。
ミハイダニラ

読者の参考のために-質問はもともと「現在のディレクトリ」という用語を使用していましたが、スクリプトを含むディレクトリを意味していました-これは現在修正されています。
chiccodoro

4

ファイル名に影響するいくつかの式:

~f0完全修飾ファイル名を指定します。
~dpnx0と同じになり~f0ますが、これは、それを複数の部分に分割できることを示しています。d = drive p = path n = name x = extension


0

chdirコマンドを使用

オプション1:

chdir 

オプション2:

echo %CD%

ここでも同じ:これはOPの意図ではありませんでした-問題はより明確になりました。
chiccodoro
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.