在批处理脚本中获取特定路径的父目录

sel*_*mar 5 windows cmd batch-file

嗨,我在批处理文件的变量中有完整的文件路径.如何获取其第一级和第二级父目录路径?

set path=C:\SecondParent\FirstParent\testfile.ini
Run Code Online (Sandbox Code Playgroud)

npo*_*aka 13

不要使用变量PATH.%PATH%是命令提示符使用的内置变量.

@echo off
set "_path=C:\SecondParent\FirstParent\testfile.ini"
for %%a in ("%_path%") do set "p_dir=%%~dpa"
echo %p_dir%
for %%a in (%p_dir:~0,-1%) do set "p2_dir=%%~dpa"
echo %p2_dir%
Run Code Online (Sandbox Code Playgroud)

  • 我会将第二个`for`循环改为:`for/D %% a in("%p_dir%..")设置"p2_dir = %% ~dpa"`; 你正在删除尾部反斜杠,这可能是有问题的,如果第一级父已经是驱动器的根,因为循环将接收例如`D:`,这意味着驱动器的当前目录`D:`; 我的建议返回驱动器`D:`的根... (3认同)

roj*_*ojo 5

正如npocmaka正确建议的那样,选择一个不同于的变量%PATH%(或其他任何环境变量)。其次,请确保您的脚本用于setlocal避免通过此脚本中的变量影响控制台会话的环境。第三,只需\..为要导航的每个祖先添加一个。无需理会子字符串操作。

@echo off
setlocal

set "dir=C:\SecondParent\FirstParent\testfile.ini"
for %%I in ("%dir%\..\..") do set "grandparent=%%~fI"
echo %grandparent%
Run Code Online (Sandbox Code Playgroud)