获取当前路径的一部分

Get a part of the current path

我想获取我的批处理脚本所在的当前目录的一部分。

位置是这样的:Y:\abc\def\ghi\jkl\script.bat

我只想保留 Y 后面的内容:\abc\def\ (即 \ghi\jkl)

如何操作?

我正在使用下面的代码获取完整路径,但如何进行定界?

for /f %%a in ("%CD%") do set CURR=%%a
echo %CURR%

感谢您宝贵的帮助。

我相信也许你可以将要剪切的部分放在 txt 文件中,然后从文件中的循环中操作字符串,如下所示:

echo %cd% > path.txt

for /f "tokens=3,* delims=\" %%a in (path.txt) do echo %%b

用参数tokens=3判断深度,分隔符为"\"

根据你说的"directory where my batch script is from",下面应该就够了,(添加最后一行是为了演示目的,请根据需要进行更改):

@Set "x=%~dp0"&SetLocal EnableDelayedExpansion
@Set "i=0"&Set "x!i!=%x:\="&Set /A i+=1&Set "x!i!=%"
@Set /A i-=1,y=i-1
@If %i% Lss 1 (Set "z=%x0%\")Else (If %i% Equ 1 (Set "z=%x0%\%x1%"
        )Else Set "z=!x%y%!\!x%i%!")
@EndLocal&Set "y=%z%"
@Echo %x% becomes %y%&Pause

我已经做到了,如果脚本目录不够深,仍然会输出完整路径。

如果您想使用当前目录而不是脚本位置,请根据需要将 1 行的 %~dp0 更改为 %__CD__%%CD%\

@echo off
setlocal

set "reversed="
set "fromdir=%~dp0"

for %%A in ("%fromdir:\=" "%") do call set "reversed=%%~A\%%reversed%%"
for /f "tokens=1-2 delims=\" %%A in ("%reversed%") do set "result=\%%B\%%A"

echo %result%
pause

如果路径段可以反转,那么获取最后 2 个段是设置 1-2 标记选项的已知数字,因为它们将成为前 2 个段。第一个 for 循环进行反转。第二个 for 循环获取第一个 2 个标记,并以相反的顺序设置为 result,这是原始顺序。

fromdir 是为脚本目录 %~dp0 设置的,但如果需要可以用 %cd% 设置。

查看 set /?,了解 "%fromdir:\=" "%" 如何用 " " 替换 \,以便路径段成为单独的参数,即 "C:\dir1\dir2\dir3" 变成 "C:" "dir1" "dir2" "dir3".