获取当前路径的一部分

时间:2020-04-14 10:12:15

标签: windows for-loop batch-file directory delimiter

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

位置类似于:Y:\ abc \ def \ ghi \ jkl \ script.bat

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

如何执行此操作?

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

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

感谢您的宝贵帮助。

3 个答案:

答案 0 :(得分:0)

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

echo %cd% > path.txt

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

使用参数tokens=3确定深度,分隔符为"\"

答案 1 :(得分:0)

根据您所说的“我的批处理脚本所在的目录”,以下内容就足够了:(最后一行用于演示,请根据需要进行更改)

@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

我这样做的目的是,如果脚本目录不够深,仍将输出完整路径。

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

答案 2 :(得分:0)

@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"