我知道我可以使用以下代码获取当前目录名称。
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
。
怎么做?
答案 0 :(得分:2)
a.bat
中,请使用
for /f %%q in ("%~dp0.") do echo %%~nxq
答案 1 :(得分:1)
环境变量CD
始终具有当前目录的路径。在命令提示符窗口set /?
中运行,以便在此命令列表的帮助下显示在几个页面上,最后还有动态环境变量,如CD
,DATE
或TIME
仅在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:\
。