を使用しています。コマンドプロンプトウィンドウset /?
で実行すると、このコマンドのヘルプの末尾に表示されるCD
、DATE
またはTIME
などのビルトイン環境変数は、現在実行されているすべての環境を出力するset
変数。
現在のディレクトリは、バッチファイルをダブルクリックした場合の開始バッチファイルのディレクトリと同じにすることができます。
しかし、現在のディレクトリは、バッチファイルのディレクトリとは別のディレクトリでもかまいません。たとえば、バッチファイルを管理者またはシステムアカウントでスケジュールされたタスクとして実行する場合、カレントディレクトリは%SystemRoot%\System32
です。
私たちは、コマンドラインでC:\folderA\a.bat
があるとしましょう:
@echo off
echo Running %~nx0
echo/
echo Current directory is: %CD%
echo Directory of %~nx0 is: %~dp0
をして、コマンドラインでC:\folderA\folderB\b.bat
があります:
@echo off
echo Running %~nx0
echo/
echo Current directory is: %CD%
echo Directory of %~nx0 is: %~dp0
echo/
call "%~dp0..\a.bat"
echo/
echo Running again %~nx0
echo/
echo Current directory is: %CD%
echo Directory of %~nx0 is: %~dp0
echo/
for /F %%I in ("%~dp0..\") do echo Batch parent directory is: %%~dpI
for /F %%I in ("%CD%\..\") do echo Current parent directory is: %%~dpI
バッチファイル出力で
C:\folderA\folderB\b.bat
結果に
ダブルクリック:
Running b.bat
Current directory is: C:\folderA\folderB
Directory of b.bat is: C:\folderA\folderB\
Running a.bat
Current directory is: C:\folderA\folderB
Directory of a.bat is: C:\folderA\
Running again b.bat
Current directory is: C:\folderA\folderB
Directory of b.bat is: C:\folderA\folderB\
Batch parent directory is: C:\folderA\
Current parent directory is: C:\folderA\
call
を使用せずにa.bat
の終わりに達するにb.bat
への復帰はありません
Running b.bat
Current directory is: C:\folderA\folderB
Directory of b.bat is: C:\folderA\folderB\
Running a.bat
Current directory is: C:\folderA\folderB
Directory of a.bat is: C:\folderA\
:b.bat
のライン7と再び出力でb.bat
結果を実行中のコマンドcall
。
次は、私たちは、コマンドラインC:\folderA\folderB\b.bat
とC:\Windows\System32
から7行目に再びcall
たb.bat
を実行する上での出力に見てみましょう:
Running b.bat
Current directory is: C:\Windows\system32
Directory of b.bat is: C:\folderA\folderB\
Running a.bat
Current directory is: C:\Windows\system32
Directory of a.bat is: C:\folderA\
Running again b.bat
Current directory is: C:\Windows\system32
Directory of b.bat is: C:\folderA\folderB\
Batch parent directory is: C:\folderA\
Current parent directory is: C:\Windows\
注意:環境変数によって、現在のディレクトリホールドの
パスCD
には、現在のディレクトリがドライブのルートディレクトリであることを除いて、最後にバックスラッシュはありません。この場合、CD
は、ちょうどC:
の代わりにC:\
です。
%~dp0
を使用する場合は、In Batch file ~dp0 changes on changing directoryをご利用ください。
btw - 構造体の説明では、 'b.bat'から' a.bat'を実行しているので、 'a.bt'から' b.bat'への戻りはありません。あなたの記述に従って 'a.bat'を' call 'していたなら、あなたは '%dp0 .. \ a.bat'を呼び出す必要があります(あなたはあなたの投稿から'〜 'を省略しました)。 – Magoo