2011-09-23 44 views
4

我有一个目录如何获得目录路径的一部分在批处理文件

D:\dir1\dir2\getpath.bat 

一个BAT文件,当我运行下面的代码蝙蝠它打印

D:\dir1\dir2\ 

我只想要路径D:\dir1\

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

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

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

+0

我不认为我完全理解。你究竟想要做什么?什么指定你的“完整的目录路径”?假设你将脚本移动到'F:\ other \ bins \ own',你应该输出什么内容? 'F:\ other \ bins \','F:\ other \'或其他什么? – SvenS

+0

@SvenS:我想输出为F:\ other \ bin 3号线上的 –

回答

1

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

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

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

注意,这当然,如果你的批处理位于你的驱动器根目录下(如F:\);)如果你想要一个特殊的输出,如果是这种情况,你应该在echo之前测试%CD%%batchdir%

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

+0

从不同的目录或不同的驱动器运行时,这项工作是否可行? pushd/popd比保存batchdir简单吗? –

+0

哦,你说得对,我会在一个补丁中编辑。 '%〜dp0'不是工作目录,而是批处理目录([source](http://www.computerhope.com/forum/index.php?topic=54333.0)),所以你需要cd到该目录首先(如果这是所期望的)。我真的不能说任何pushd/popd。 – SvenS

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

错误= P – Mechaflash

-1

你几乎是正确的。使用%〜dp0抓取您的.bat的Drive + Full路径,以便它将返回您的bat文件所在的文件夹。

由于活性直接将你的蝙蝠从运行的目录,所有你需要做的是:

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

如果把这个在蝙蝠脚本来验证,扔在上一个PAUSE换行来看你的输出。

+1

为什么活动目录是蝙蝠运行的目录?如果他称之为活动目录是c:\,他会运行D:\ dir1 \ dir2 \ getpath.bat?不会直接通过c:\? –

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

:parentfolder 
echo %~dp1 
goto :eof 
+0

如果'%〜dp0 = C:\ dir1 \ dir2'设置'%SUBDIR:〜0,-1%'会将它变成'C:\ dir1 \ dir'。如果OP在单个编号序列中没有具有相同名称的目录,则这并不能解决他的问题。 – Mechaflash

+1

@Mechaflash:你有没有尝试过这样做?那么你所说的不是最后一步。值“C:\ dir1 \ dir”被传递给另一个执行ECHO的例程。如果您尝试运行,它会很好地工作 – Arun

+0

我喜欢这个答案。将代码与setlocal/endlocal括起来以便SUBDIR在批处理文件上下文之外不可用是一种很好的做法。 –

0

的一行代码做它:-)

如果你想尾随反斜杠,然后

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


如果您不想尾随反斜杠,然后

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

为什么有人会投票呢?它提供了正确的答案,并且从代码量和性能的角度来看都非常高效。 – dbenham

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

相关问题