Windows Batch获取批处理与目标文件间的相对路径问题
问题解决:获取批处理所在目录到目标文件的指定路径
你的代码中路径替换部分的语法错误,批处理延迟变量环境下的字符串替换需要使用正确的!var:find=replace!格式,而非混合%和!的写法。以下是修正后的实现:
@ECHO OFF SET "StartPath=%cd%" :: 统一处理StartPath,确保结尾无反斜杠,避免替换时出现多余的斜杠 IF "%StartPath:~-1%"=="\" SET "StartPath=%StartPath:~0,-1%" setlocal enabledelayedexpansion :: 提取StartPath的最后一级目录名(比如示例中的com) FOR %%d IN ("%StartPath%") DO SET "RootDir=%%~nxd" :: 递归遍历所有jar文件 for /R %%f in (*.jar) do ( set "fullpath=%%f" :: 从完整路径中移除StartPath部分,得到带前置斜杠的相对路径 set "relpath=!fullpath:%StartPath%=!" :: 移除前置的斜杠 set "relpath=!relpath:~1!" :: 拼接根目录名和相对路径,得到期望的结果 set "jarpath=!RootDir!\!relpath!" echo "jarpath: !jarpath!" ) endlocal
关键修正点:
- 修正替换语法:使用
!fullpath:%StartPath%=!完成路径替换,因为StartPath是在延迟变量开启前定义的静态变量,直接用%StartPath%即可。 - 统一路径格式:提前处理
StartPath的结尾斜杠,避免替换后出现多余的前置斜杠。 - 提取根目录名:通过
FOR %%d IN ("%StartPath%") DO SET "RootDir=%%~nxd"获取批处理所在目录的名称(如示例中的com),再与相对路径拼接得到最终结果。
内容的提问来源于stack exchange,提问作者Keshtocal
相关产品推荐
相关产品推荐

