我有-
D:/Folder/GitLab/ENO/win/abc1/def1/abc.java
我想在ENO之后提取数据,如下所示:-
win/abc1/def1/abc.java
并清除上面所有内容。
答案 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"