2016-12-16 11 views
0

私は現在のディレクトリ名を取得するために、次のコードを使用することができます知っている。バッチファイルがサブフォルダから呼び出されている間、現在のディレクトリ名を取得する方法は?

for %%* in (.) do echo %%~nx* 

しかし、私はこの設定をしても動作しません。 b.batインサイド

folderA 
    a.bat 
    folderB 
     b.bat 

、私が持っている:a.bat

%~dp0..\a.bat 

を、私が持っている:

for %%* in (.) do echo %%~nx* 

しかし、出力b.batが実行しているとき、それはサブで実行しているため、おそらくfolderBですフォルダのコンテキスト。しかし、私はa.batfolderAという独自のディレクトリ名を出力します。

どうすればよいですか? a.bat

答えて

2

、常に現在のディレクトリのパスを持っている環境変数CDがあり

for /f %%q in ("%~dp0.") do echo %%~nxq 
+0

btw - 構造体の説明では、 'b.bat'から' a.bat'を実行しているので、 'a.bt'から' b.bat'への戻りはありません。あなたの記述に従って 'a.bat'を' call 'していたなら、あなたは '%dp0 .. \ a.bat'を呼び出す必要があります(あなたはあなたの投稿から'〜 'を省略しました)。 – Magoo

1

を使用しています。コマンドプロンプトウィンドウset /?で実行すると、このコマンドのヘルプの末尾に表示されるCDDATEまたは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.batC:\Windows\System32から7行目に再びcallb.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をご利用ください。

関連する問題