从子文件夹调用批处理文件时如何获取当前目录名称?

时间:2016-12-16 01:36:14

标签: windows batch-file cmd

我知道我可以使用以下代码获取当前目录名称。

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

但是如果我有这个设置,这将无效。

folderA
    a.bat
    folderB
        b.bat

b.bat内,我有:

%~dp0..\a.bat

a.bat中,我有:

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

但输出为folderB可能是因为b.bat正在执行时,它正在子文件夹的上下文中执行。但我希望a.bat输出自己的目录名folderA

怎么做?

2 个答案:

答案 0 :(得分:2)

a.bat

,请使用

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

答案 1 :(得分:1)

环境变量CD始终具有当前目录的路径。在命令提示符窗口set /?中运行,以便在此命令列表的帮助下显示在几个页面上,最后还有动态环境变量,如CDDATETIME仅在set运行时无法看到,它输出所有当前定义的静态环境变量。

当前目录可以等于已启动批处理文件的目录,这通常是双击批处理文件的情况。

但是当前目录也可以是与批处理文件目录不同的任何其他目录。例如,当前目录为%SystemRoot%\System32以管理员身份运行批处理文件,或者作为带有系统帐户的计划任务或%SystemRoot%双击使用UNC路径访问的网络资源上的批处理文件。

让我们假设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第7行中的b.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,则a.bat到达call时无法返回。

接下来让我们通过b.bat命令行call查看第7行再次C:\Windows\System32的{​​{1}}输出:

C:\folderA\folderB\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:时,请考虑:
What is the reason for batch file path referenced with %~dp0 sometimes changes on changing directory?