根据批量

时间:2018-01-15 13:46:55

标签: batch-file batch-processing

我有以下代码:

SET location_path=\\dc01\intern\Product\NightlyBuild\Reg\Reg_20171207.1\out\site
OR
SET location_path=\\dc01\intern\Product\Release\ex\17.12\site

现在我想从变量中获取以下值:

location_path_trimmed = Reg\Reg_20171207.1
OR
location_path_trimmed = 17.12

因此,对于每个路径,应从变量中取出不同的部分。例如,我需要一种搜索​​单词的方法:" NightlyBuild "或" 发布"为了检索所需的值。我试图通过使用左字符串方法来执行此操作,如:

%location_path:~0,4%

但这不起作用。谁能引导我朝着正确的方向前进?

2 个答案:

答案 0 :(得分:1)

您可以使用echo %str% | find /i "Release"来测试Release等。然后,您可以使用for /F循环来标记路径值的各个部分,并使用/作为分隔符。或者,如果您需要剥离的组件可能处于不可预测的令牌位置,您可以使用变量子串替换来去除所需的部分。

这是一个演示子串替换方法的例子:

@echo off & setlocal

SET "location_path=\\dc01\intern\Product\NightlyBuild\Reg\Reg_20171207.1\out\site"
call :trim "%location_path%" trimmed || exit /b 1
set trimmed

SET "location_path=\\dc01\intern\Product\Release\ex\17.12\site"
call :trim "%location_path%" trimmed || exit /b 1
set trimmed

goto :EOF

:trim <path> <return_var>
setlocal disabledelayedexpansion
set "orig=%~1"
echo(%~1 | find /i "NightlyBuild\" >NUL && (
    set "trimmed=%orig:*NightlyBuild\=%"
) || (
    echo(%~1 | find /i "Release\" >NUL && (
        set "trimmed=%orig:*ex\=%"
    ) || (
        endlocal
        >&2 echo Error: %~1 contains unexpected build info
        exit /b 1
    )
)

set trimmed=%trimmed:\out=&rem;%
set trimmed=%trimmed:\site=&rem;%
endlocal & set "%~2=%trimmed%" & goto :EOF

您会注意到要在所需的值之前删除部分,您可以使用通配符 - 例如set "trimmed=%orig:*NightlyBuild\=%"。在所需的值之后剥离部分需要更多的创造力:set trimmed=%trimmed:\out=&rem;%。有关批量变量字符串操作的更多信息,请See this page。如果需要,您还可以阅读creating functions in batch files

答案 1 :(得分:1)

你甚至可以这样做:

string

出于测试目的,只需根据需要在行@Echo Off Set "location_path=\\dc01\intern\Product\NightlyBuild\Reg\Reg_20171207.1\out\site" Rem Set "location_path=\\dc01\intern\Product\Release\ex\17.12\site" If /I "%location_path:\NightlyBuild\=%"=="%location_path%" ( If /I Not "%location_path:\Release\=%"=="%location_path%" ( Set "location_path_trimmed=%location_path:*\Release\=%")) Else ( Set "location_path_trimmed=%location_path:*\NightlyBuild\=%") Set "location_path_trimmed=%location_path_trimmed:*\=%" Set "location_path_trimmed=%location_path_trimmed:\="&:"%" Set location_path_trimmed 2>Nul Pause Rem之间切换2方法。