我想決議單行文本,其中的單詞由空格隔開,并將每個單詞存盤在自己的陣列模擬變數中。根據ss64,我應該能夠做到這一點。我可能沒有理解delims或tokens,因為我的代碼作業了1個迭代就停止了。
::@echo off
setlocal enabledelayedexpansion
設定字串=foo bar baz
設定/a index=0
for /F "tokens=* delims= " %%i in ("foo bar baz") do (
echo %%i
echo !"index!
設定單詞[%index%]=%%i
設定/a index =1
echo !"index!
)
設定單詞[
下面是我用除錯回音得到的輸出:
C:UsersisimmDesktopatintercept>stringparse.cmd
C:UsersisimmDesktopintercept>setlocal enabledelayedexpansion
C:UsersisimmDesktopintercept>set string=foo bar baz
C:UsersisimmDesktopatintercept>set /a index=0
C:UsersisimmDesktopatintercept>for /F "tokens=* delims= " %i in ("foo bar baz") do (
echo %i
echo !"index!
設定單詞[0]=%i
設定/a index =1
echo !"index!
)
C:UsersisimmDesktopintercept>(
echo foo bar baz
echo !"index!
set words[0]=foo bar baz
設定/a index =1
echo !"index!
)
foo bar baz
0
1
C:UsersisimmDesktopintercept>設定單詞[
words[0]=foo bar baz
tokens=*給我上述輸出,tokens=1,2,3只給我第一個詞,tokens=1或tokens=2或tokens=3給我第一個、第二個或第三個詞。根據我的理解,"delims="是多余的,因為默認情況下會使用空格,但無論我是否包含delims,都是一樣的。
我還試著使用下劃線,以防空格有什么問題,還試著把文本放在foo.txt檔案中,而不是字面字串。在這兩種情況下,我都得到了與原始字串相同的結果。
。我所期望的輸出是:
words[0]=foo
words[1]=bar
words[2]=baz
uj5u.com熱心網友回復:
你可以使用這個更簡單的方法:
@echo off
setlocal EnableDelayedExpansion
設定字串=foo bar baz
設定/a index=0
設定 "words[%index%]=%string: =" & 設定/A index =1 & 設定 "words[!index!]=%"
設定單詞[
如果你想知道神奇之處,請洗掉@echo off行,運行Batch檔案并仔細查看螢屏。更多細節請見以字串為分隔符的字串分割
EDIT: 增加了新的方法
你也可以使用這個方法。
你也可以使用這個有點隱晦的方法:
@echo off
setlocal EnableDelayedExpansion
設定字串=foo bar baz
設定/a index=0
for /F %%i in (^"!string: ^=^
%不要洗掉這一行 %
!^")做(
設定 words[!index!]=%%i
設定/A index =1
)
設定單詞[
在這種方法中,空格被一個LF ASCII字符取代... ;)
uj5u.com熱心網友回復:
我試過這種方式,它對我來說是有效的:
@echo off & setlocal
setlocal enabledelayedexpansion
設定字串=foo bar baz
設定/a index=0
rem temporaryVariable的值總是在for回圈中改變。
set temporaryVariable=%string%
:回圈
for /f "tokens=1*" %%a in ("%temporaryVariable%") do (
設定單詞[%index%]=%%a
設定/a index =1
設定臨時變數=%%b
)
如果定義了temporaryVariable,則進入:回圈。
設定單詞[
我的答案是基于這個。 https://stackoverflow.com/a/19009701/12367987
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/315730.html
標籤:
