如何提取一部分字符串

时间:2018-09-12 09:20:54

标签: batch-file

我有-

D:/Folder/GitLab/ENO/win/abc1/def1/abc.java

我想在ENO之后提取数据,如下所示:-

win/abc1/def1/abc.java

并清除上面所有内容。

2 个答案:

答案 0 :(得分:2)

@echo off
setlocal enabledelayedexpansion
set "curpath=D:\Folder\GitLab\ENO\win\abc.java"
set "eno="
set "newpath="

for %%A in ("%curpath:\=" "%") do (
    if defined eno set "newpath=!newpath!%%~A\"
    if /i "%%~A" == "ENO" set "eno=1"
)

if defined newpath set "newpath=%newpath:~0,-1%"

if defined newpath echo %newpath%

curpath除以\并在每个句段双引号引起来。 这是通过使用变量替换来完成的。 有关变量替换的工作原理,请参见set /?

for循环迭代每个段。 一旦检测到段ENO,变量eno 定义,以便可以收集以下段 变量newpath

循环后,结尾的\被删除,结果 回响了。

结果为win\abc.java

您对for /r的评论:

@echo off
setlocal enabledelayedexpansion

for /r %%A in (.) do (
    set "curpath=%%A"
    call set "curpath=%%curpath:%cd%=%%"
    echo !curpath:~1!
)

exit /b

这将从路径中删除当前目录。 call set扩展变量并将"%cd%"替换为"",且不带引号。预计第一个字符为\,因此将其删除。

答案 1 :(得分:0)

采用路径(使用\而不是/),将其按最后一个路径分割,然后回显上一个文件夹名称%%~nxi,并添加一个斜杠,其文件名为%%~nxa

@echo off
set "mypath=D:\Folder\GitLab\ENO\win\abc.java"
for /f "delims=" %%a in ("%mypath%") do for %%i in ("%%a\..") do echo "%%~nxi\%%~nxa"