我有以下字符串:解析字符串
MyProject/Architecture=32bit,BuildType=Debug,OS=winpc
我希望能夠抓住值32位,調試和winpc並將其存儲在名爲架構,BuildType變量, OS在批處理腳本中稍後引用。我通常是Unix傢伙,所以這對我來說是一個新的領域。任何幫助將不勝感激!
我有以下字符串:解析字符串
MyProject/Architecture=32bit,BuildType=Debug,OS=winpc
我希望能夠抓住值32位,調試和winpc並將其存儲在名爲架構,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 /?
以獲得它可以做的一些瘋狂的事情的描述。
嘗試以下操作:
@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
只是爲了好玩,考慮用單行'SET %% A&SET %% B&SET %% C'替換你的三個內部'FOR'循環。偉大的名字BTW。 –
這裏是不關心有多少或什麼樣的順序名稱=值指定對一個有趣的解決方案。訣竅是用換行符替換每個逗號,以便FOR/F將迭代每個名稱=值對。只要字符串中只有一個/
,這應該工作。
@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%
帶着幾分更多的代碼,它可以選擇性地分析出,我們感興趣的只是name = 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
::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