यहाँ एक दिलचस्प समाधान है कि कितने और किस आदेश नाम = value जोड़े निर्दिष्ट कर रहे हैं परवाह नहीं करता है। यह चाल प्रत्येक कॉमा को एक लाइनफेड चरित्र के साथ प्रतिस्थापित करने के लिए है ताकि फॉर/एफ प्रत्येक नाम = मूल्य जोड़ी को फिर से सक्रिय करे। यह तब तक काम करना चाहिए जब तक स्ट्रिंग में केवल एक /
न हो।
@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%
में थोड़ा और अधिक कोड यह चुनिंदा केवल नाम = value जोड़े है कि हम में रुचि रखते हैं पार्स आउट कर सकते हैं। यह भी मामले चर स्ट्रिंग से याद आ रही है में अपरिभाषित करने के लिए चर initializes साथ
।
@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