9

次の文字列があります。

MyProject/Architecture=32bit,BuildType=Debug,OS=winpc

32bit、Debug、winpc の値を取得し、Architecture、BuildType、OS という名前の変数に格納して、後でバッチ スクリプトで参照できるようにしたいと考えています。私は通常 Unix の人間なので、これは私にとって新しい領域です。どんな助けでも大歓迎です!

4

3 に答える 3

30

これはそれを行う必要があります:

FOR /F "tokens=1-6 delims==," %%I IN ("MyProject/Architecture=32bit,BuildType=Debug,OS=winpc") DO (
    ECHO I %%I, J %%J, K %%K, L %%L, M %%M, N %%N
)
REM output is: I MyProject/Architecture, J 32bit, K BuildType, L Debug, M OS, N winpc

バッチFORループは、非常に興味深い機構です。コンソールに入力FOR /?して、実行できるクレイジーなことの説明を入力してください。

于 2012-09-27T20:57:53.077 に答える
8

name=value のペアが指定されている数や順序を気にしない興味深いソリューションを次に示します。トリックは、各コンマを改行文字に置き換えて、FOR /F が各名前=値のペアを繰り返すようにすることです。これは、文字列に 1 つしかない限り機能/します。

@echo off
setlocal enableDelayedExpansion
set "str=MyProject/Architecture=32bit,BuildType=Debug,OS=winpc"

::Eliminate the leading project info
set "str=%str:*/=%"

::Define a variable containing a LineFeed character
set LF=^


::The above 2 empty lines are critical - do not remove

::Parse and set the values
for %%A in ("!LF!") do (
  for /f "eol== tokens=1* delims==" %%B in ("!str:,=%%~A!") do set "%%B=%%C"
)

::Display the values
echo Architecture=%Architecture%
echo BuildType=%BuildType%
echo OS=%OS%

もう少しコードを追加すると、関心のある名前=値のペアのみを選択的に解析できます。また、変数が文字列にない場合に備えて、変数を未定義に初期化します。

@echo off
setlocal enableDelayedExpansion
set "str=MyProject/Architecture=32bit,BuildType=Debug,OS=winpc"

::Eliminate the leading project info
set "str=%str:*/=%"

::Define a variable containing a LineFeed character
set LF=^


::The above 2 empty lines are critical - do not remove

::Define the variables we are interested in
set "vars= Architecture BuildType OS "

::Clear any existing values
for %%A in (%vars%) do set "%%A="

::Parse and conditionally set the values
for %%A in ("!LF!") do (
  for /f "eol== tokens=1* delims==" %%B in ("!str:,=%%~A!") do (
    if !vars: %%B ! neq !vars! set "%%B=%%C"
  )
)

::Display the values
for %%A in (%vars%) do echo %%A=!%%A!
于 2012-09-27T22:17:11.297 に答える
3

次のことを試してください。

@ECHO OFF

SET Var=MyProject/Architecture=32bit,BuildType=Debug,OS=winpc

FOR /F "tokens=1,2,3 delims=," %%A IN ("%Var%") DO (
    FOR /F "tokens=1,2 delims==" %%D IN ("%%A") DO (
        SET Architecture=%%E
    )
    FOR /F "tokens=1,2 delims==" %%D IN ("%%B") DO (
        SET BuildType=%%E
    )
    FOR /F "tokens=1,2 delims==" %%D IN ("%%C") DO (
        SET OS=%%E
    )
)

ECHO %Architecture%
ECHO %BuildType%
ECHO %OS%

PAUSE
于 2012-09-27T20:58:08.990 に答える