我在一个目录中有一个BAT文件
D:\dir1\dir2\getpath.bat
当我运行以下代码的批处理文件时,它会打印出:
D:\dir1\dir2\
我只需要路径 D:\dir1\
目录结构不是固定的,需要完整的目录路径而不是BAT文件所在的当前目录。
@echo off
SET SUBDIR=%~dp0
ECHO %SUBDIR%
我尝试在for循环中使用分隔符,但并没有帮助。
我在一个目录中有一个BAT文件
D:\dir1\dir2\getpath.bat
D:\dir1\dir2\
我只需要路径 D:\dir1\
目录结构不是固定的,需要完整的目录路径而不是BAT文件所在的当前目录。
@echo off
SET SUBDIR=%~dp0
ECHO %SUBDIR%
我尝试在for循环中使用分隔符,但并没有帮助。
@echo off
setlocal
SET SUBDIR=%~dp0
call :parentfolder %SUBDIR:~0,-1%
endlocal
goto :eof
:parentfolder
echo %~dp1
goto :eof
%~dp0=C:\dir1\dir2
,那么设置%SUBDIR:~0,-1%
将把它变成C:\dir1\dir
。但是,如果操作者在单个编号序列中没有具有相同名称的目录,则此方法无法解决他的问题。 - Anthony Millergoto :eof
之前。 - Richard Afor %%A in ("%~dp0.") do @echo %%~dpA
for %%A in ("%~dp0..") do @echo %%~fA
@echo off
SET MYDIR=%cd%
cd %MYDIR%\..
SET MYPARENTDIR=%cd%
cd %MYDIR%
@echo off
SET batchdir=%~dp0
cd /D "%batchdir%.."
echo %CD%
cd "%batchdir%"
(未经测试,请在有问题的情况下进行评论)
请注意,如果您的批处理文件位于驱动器根目录中(例如F:\
),这当然不会改变任何内容;) 如果您希望在这种情况下获得特殊输出,则应在回显之前将%CD%
与%batchdir%
进行测试。
编辑:已应用补丁,请参见@RichardA的评论。
%~dp0 返回当前批处理文件的完整驱动器号和路径。这可以在 FOR 命令中使用,以获取路径的部分:
当从 C:\dir1\dir2\dir3\batch.bat
运行时
FOR %%V IN ("%~dp0..\") DO @ECHO %%~dpV
返回 C:\dir1\dir2\
这可以扩展到继续向上的路径:
FOR %%V IN ("%~dp0..\..\") DO @ECHO %%~dpV
返回 C:\dir1\
你差不多做对了。使用%~dp0可以获取到你的.bat文件所在的驱动器和完整路径,因此它将返回包含你的bat文件的文件夹。
由于活动目录将是运行你的bat文件的目录,所以你只需要:
@echo off
CD ..
SET SUBDIR=%CD%
ECHO %SUBDIR%
PAUSE
以查看输出结果。
F:\other\bins\own
,你的输出应该是什么?F:\other\bins\
,F:\other\
还是完全不同的其他内容? - SvenS