次の文字列があります。
MyProject/Architecture=32bit,BuildType=Debug,OS=winpc
32bit、Debug、winpc の値を取得し、Architecture、BuildType、OS という名前の変数に格納して、後でバッチ スクリプトで参照できるようにしたいと考えています。私は通常 Unix の人間なので、これは私にとって新しい領域です。どんな助けでも大歓迎です!
次の文字列があります。
MyProject/Architecture=32bit,BuildType=Debug,OS=winpc
32bit、Debug、winpc の値を取得し、Architecture、BuildType、OS という名前の変数に格納して、後でバッチ スクリプトで参照できるようにしたいと考えています。私は通常 Unix の人間なので、これは私にとって新しい領域です。どんな助けでも大歓迎です!
これはそれを行う必要があります:
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 /?
して、実行できるクレイジーなことの説明を入力してください。
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!
次のことを試してください。
@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