我在目录中有一个BAT文件
D:\dir1\dir2\getpath.bat
当我使用以下代码运行bat时,它会打印
D:\dir1\dir2\
我只想要路径D:\dir1\
目录结构不固定,需要除BAT文件所在的当前目录以外的完整目录路径。
@echo off
SET SUBDIR=%~dp0
ECHO %SUBDIR%
尝试在for循环中使用delims,但它没有帮助。
答案 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\
答案 5 :(得分:-1)
你几乎把它弄好了。使用%~dp0抓取.bat的Drive + Full路径,这样它就会返回你的bat文件所在的文件夹。
由于直接激活将是你的蝙蝠运行的目录,所以你需要做的就是:
@echo off
CD ..
SET SUBDIR=%CD%
ECHO %SUBDIR%
如果将其放入蝙蝠脚本进行验证,请在换行符上输入PAUSE
以查看输出。