现在我需要从批处理文件中的字符串中获取子字符串
我有这个
set path="c:\test\branches\9.1\_build"
我需要在分支值之后获得第一个值:9.1
但是这个值可以在其他位置,比如
c:\xxx\yyyy\zzzz\branches\otherbranch\zzz\uuuu\iii
在这种情况下,我需要得到这个:otherbranch
我需要一个通用的解决方案,谢谢你们..
现在我需要从批处理文件中的字符串中获取子字符串
我有这个
set path="c:\test\branches\9.1\_build"
我需要在分支值之后获得第一个值:9.1
但是这个值可以在其他位置,比如
c:\xxx\yyyy\zzzz\branches\otherbranch\zzz\uuuu\iii
在这种情况下,我需要得到这个:otherbranch
我需要一个通用的解决方案,谢谢你们..
set "mypath=c:\test\branches\9.1\_build"
set "value=%mypath:*\branches\=%"
if "%value%"=="%mypath%" echo "\branches\" not found &goto :eof
for /f "delims=\" %%a in ("%value%") do set "value=%%~a"
echo %value%
它使用 :split 子程序,可以在这里找到http://ss64.org/viewtopic.php?id=1687
@echo off
setlocal
rem not good idea to overwrite path
set "_path="c:\test\branches\9.1\_build""
call :split %_path% branches 2 part
call :split %part% \ 2 part2
echo %part2%
endlocal
goto :eof
:split [%1 - string to be splitted;%2 - split by;%3 - possition to get; %4 - if defined will store the result in variable with same name]
setlocal EnableDelayedExpansion
set "string=%~1"
set "splitter=%~2"
set /a position=%~3-1
set LF=^
rem ** Two empty lines are required
echo off
for %%L in ("!LF!") DO (
for /f "delims=" %%R in ("!splitter!") do (
set "var=!string:%%R=%%L!"
if "!var!" EQU "!string!" (
echo "!string!" does not contain "!splitter!" >2
exit /B 1
)
)
)
if !position! equ 0 ( set "_skip=" ) else (set "_skip=skip=%position%")
for /f "%_skip% delims=" %%P in (""!var!"") DO (
set "part=%%~P"
goto :end_for
)
:end_for
if "!part!" equ "" echo Index Out Of Bound >2 &exit /B 2
endlocal & if "%~4" NEQ "" (set %~4=%part%) else echo %part%
exit /b 0
这是一个简单的解决方案,它使用名为 REPL.BAT 的方便的混合 JScript/批处理实用程序,该实用程序在标准输入上执行正则表达式搜索和替换,并将结果写入标准输出。它是从 XP 开始在任何现代 Windows 机器上运行的纯脚本 - 不需要 3rd 方可执行文件。
它有许多选项,包括一个A
仅列出匹配的替换行的选项,以及S
从环境变量而不是标准输入读取的选项。完整的文档嵌入在脚本中。
假设 REPL.BAT 在您的当前目录中,或者更好的是,在您的路径中的某个位置,那么以下内容将value
正确设置。\branches\
如果找不到,或者没有以下内容,它将是未定义的\branches\
:
set "mypath=c:\test\branches\9.1\_build"
set "value="
for /f "eol=\ delims=" %%A in (
'repl.bat ".*\\branches\\([^\\]*).*" "$1" AS mypath'
) do set "value=%%A"
echo %value%