私は次の文字列を持っている:解析文字列
MyProject/Architecture=32bit,BuildType=Debug,OS=winpc
とOSを後でバッチスクリプトで参照します。私は通常、Unixの人ですので、これは私の新しい領域です。どんな助けでも大歓迎です!
私は次の文字列を持っている:解析文字列
MyProject/Architecture=32bit,BuildType=Debug,OS=winpc
と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 /?
と入力して、できることのいくつかを説明してください。
は、以下のことを試してみてください。ここで
@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
ちょうど楽しみのために、内部の3つの 'FOR'ループを1行の' SET %% A&SET %% B&SET %% C'に置き換えることを検討してください。素晴らしい名前BTW。 –
は、値のペアが指定されているどのように多くのか、どのような順序名=気にしない興味深いソリューションです。そのトリックは、FOR/Fが各name = valueのペアを反復するように、各コンマを改行文字で置き換えることです。文字列に/
という文字列が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,2 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="
::Set the values
for %%A in ("!LF!") do (
for /f "eol== tokens=1,2 delims==" %%B in ("!str:,=%%~A!") do (
for %%D in (%vars%) do if "%%B"=="%%D" set "%%B=%%C"
)
)
::Display the values
for %%A in (%vars%) do echo %%A=!%%A!
16秒間、かなりクリーナー!私は今日の票が切れているので、今は想像上の+1です。後で実際の投票で戻ってくる。 – LittleBobbyTables