バッチファイルの現在のディレクトリは何ですか?


510

プログラムを自動化するために、いくつかのバッチファイルを作成します。

私の質問は、バッチファイルを作成するとき、現在のディレクトリは何ですか?それはファイルが置かれているディレクトリですか、それともコマンドプロンプトに表示されるディレクトリと同じですか、それとも別のディレクトリですか?

回答:


1025

バッチファイル内から:

  • %cd%現在の作業ディレクトリを参照します(変数)
  • %~dp0 バッチファイルのディレクトリへのフルパスを参照します(静的)
  • %~dpnx0そして、%~f0の両方がバッチディレクトリとファイル名(静的)への完全なパスを参照してください。

参照:%〜dp0の意味、およびその機能


5
Јοеу@ - %0現在のサブルーチンの名前を与えることができる、しかし%~dp0ます常に実行するバッチファイルへのフルパスを与えます。
dbenham 2013年

77
実際、%〜dp0は実行中のバッチファイルがあるディレクトリへのフルパスを提供するように見えます。%〜dpnx0(%〜f0と同等)はバッチファイルへのフルパスを提供します。詳細については、robvanderwoude.com / parameters.phpを参照してください。
deadlydog 2013

6
同様の質問の適切な詳細な回答も参照してください。Windowsバッチスクリプト(.bat)で渡された引数のリストを取得する
olibre

1
残念ながら、.netからプロセスとして実行すると、%〜dp0はバッチファイルディレクトリではなく作業ディレクトリです。これは難しい方法です。
トランプスター

3
より明確な例として、.cmdファイルを右クリックして管理者として実行すると、バッチファイルディレクトリに末尾のスラッシュ%cd%が付けられC:\WINDOWS\system32たり%~dp0付けられたりします。
icc97 2018

25

これは、通常、バッチファイルが起動されたディレクトリですが、ショートカットからバッチファイルを起動する場合は、別の開始ディレクトリを指定することができました。また、cmd c:\dir3を使用c:\dir1\dir2\batch.batしていて、現在のディレクトリがの場合でも、バッチファイルを開始できますc:\dir3。この場合、現在のディレクトリはになります。


11

バッチファイルでは、%cd%が現在のディレクトリで最もよく使用されるコマンドですが、独自の変数を設定することもできます。

set mypath=%cd%
echo %mypath% (where %mypath% is the current directory that the batch file is sitting in)

Myprog.exeを開きたいとしましょう。同じフォルダにある場合は、次のコマンドを使用します。

start %mypath%\Myprog.exe

これにより、現在のフォルダーからMyprogが開きます。

もう1つのオプションは、AutomateProgramsと呼ばれるディレクトリをC:に作成することです。次に、ファイルをそのフォルダーに転送し、次のコマンドを使用してファイルを開くことができます。

start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"

1
ここでの一番上の回答で述べたように、%cd%変数は可変であるため、管理者としてWindowsエクスプローラーからバッチファイルを実行すると、C:\WINDOWS\system32ほぼ確実に期待どおりの結果が得られません。%~dp0より一貫しています。
icc97 2018

6

現在のディレクトリのファイルを開いていたとしましょう。コマンドは次のようになります。

 start %cd%\filename.filetype

あなたの質問にお答えしたいと思います。


5

これは、バッチファイルを実行するコマンドを実行するディレクトリです。

上記の回答で述べたように、以下のコマンドをスクリプトに追加して確認できます。

> set current_dir=%cd%
> echo %current_dir%  

4

これは、バッチファイルを開始するディレクトリです。例えば、あなたのバッチがである場合c:\dir1\dir2、あなたはないcd c:\dir3、その後、バッチを実行し、カレントディレクトリになりますc:\dir3


0

ちょうど私の2セント。次のコマンドは、pendriveに配置されたバッチファイル(Windows 7)から呼び出されると失敗します。

xcopy /s /e /i %cd%Ala C:\KS\Ala

しかし、これは仕事をします:

xcopy /s /e /i %~dp0Ala C:\KS\Ala

これは私がそのバッチファイル名を指定せずに私のバットファイルの親ディレクトリ・パスを決定するために探していたことをスイッチである:%~dp0
アマルモハマド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.