8

今、バッチファイルの文字列から部分文字列を取得する必要があります

私はこれを持っています

set path="c:\test\branches\9.1\_build"

ブランチ値の後に最初の値を取得する必要があります:9.1

しかし、この値は次のように他の位置にある可能性があります

c:\xxx\yyyy\zzzz\branches\otherbranch\zzz\uuuu\iii

この場合、私はこれを取得する必要があります:otherbranch 私は 1 つの一般的なソリューションが必要です, ありがとうございました..

4

3 に答える 3

3

ここで見つけることができる :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
于 2013-09-10T19:40:31.583 に答える
3

これは、標準入力で正規表現の検索と置換を実行し、結果を標準出力に書き込むREPL.BAT と呼ばれる便利なハイブリッド JScript/バッチ ユーティリティを使用する簡単なソリューションです。XP以降の最新のWindowsマシンで実行される純粋なスクリプトであり、サードパーティの実行可能ファイルは必要ありません.

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%
于 2013-09-10T20:33:03.040 に答える