如何在批处理文件中获取目录路径的一部分

时间:2011-09-23 10:20:15

标签: batch-file

我在目录中有一个BAT文件

D:\dir1\dir2\getpath.bat

当我使用以下代码运行bat时,它会打印

D:\dir1\dir2\

我只想要路径D:\dir1\

目录结构不固定,需要除BAT文件所在的当前目录以外的完整目录路径。

@echo off
SET SUBDIR=%~dp0
ECHO %SUBDIR% 

尝试在for循环中使用delims,但它没有帮助。

6 个答案:

答案 0 :(得分:3)

@echo off
setlocal
SET SUBDIR=%~dp0
call :parentfolder %SUBDIR:~0,-1% 
endlocal
goto :eof

:parentfolder
echo %~dp1
goto :eof

答案 1 :(得分:1)

如果它是你想要的脚本所在目录的父目录,那么试试这个:

@echo off
SET batchdir=%~dp0
cd /D "%batchdir%.."
echo %CD%
cd "%batchdir%"

(未经测试,如有问题请发表评论)

请注意,如果您的批次位于您的驱动器根目录中(如F:\中所示),这当然不会改变任何内容;如果您想要特殊输出(如果是这种情况),则应该测试{{ 1}}在回声之前反对%CD%

编辑:应用补丁,请参阅@RichardA的评论

答案 2 :(得分:0)

@echo off
SET MYDIR=%cd%
cd %MYDIR%\..
SET MYPARENTDIR=%cd%
cd %MYDIR%

答案 3 :(得分:0)

单行代码可以: - )

如果你想要尾部斜杠,那么

for %%A in ("%~dp0.") do @echo %%~dpA


如果你不想要尾部斜杠,那么

for %%A in ("%~dp0..") do @echo %%~fA

答案 4 :(得分:0)

%~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\

Source: Microsoft info on batch parameters

答案 5 :(得分:-1)

你几乎把它弄好了。使用%~dp0抓取.bat的Drive + Full路径,这样它就会返回你的bat文件所在的文件夹。

由于直接激活将是你的蝙蝠运行的目录,所以你需要做的就是:

@echo off
CD ..
SET SUBDIR=%CD%
ECHO %SUBDIR%

如果将其放入蝙蝠脚本进行验证,请在换行符上输入PAUSE以查看输出。