我想為一個變數(在cmd中,即批處理)的每一行運行一條命令(在這個例子中是echo)。在這種情況下,這些行應該是由分隔的。
,但其他的分隔符也應該是有效的。
因此我設定了一個變數:
> set var="foo
bar"
然后我想在每一行上運行我的命令(echo),即在 "foo "和 "bar "上。我試著用for來做這件事:
> for /f "tokens=* delims=...
" %s in (%var%) do (echo %s)
foo
bar
顯然這不是我想要的--我期望的是類似于
的東西。foo
bar
我如何實作這一點?
uj5u.com熱心網友回復:
你可以使用一個真正的換行字符來獲得你想要的效果。
setlocal EnableDelayedExpansion
(設定
=^
%=空,不要修改這一行=%。
)
設定 "var=foo!
!"吧"
for /f "delims=" %%L in ("!var!") do (
echo ## %%L
)
變數中的其他分隔符
可以被使用,但必須在后面用換行符來代替。
setlocal EnableDelayedExpansion
(設定
=^
%=空,不要修改這一行=%。
)
設定 "var=my,list,delimited,by,commas"
for %%L in ("!
!")做(
for /f "delims=" %%k in ("!var:,=%%~L!") do (
echo ## %%k
)
)
關于FOR /F中的delims選項
delims選項用于將一行分割為多個標記,這不會產生更多的回圈迭代--永遠不會。
FOR /F "tokens=1,2,3 delims=;" %%A in ("123;456;789") do echo ... %%A, %%B, %%C
輸出
... 123, 456, 789
不是
... 123
uj5u.com熱心網友回復:
%var%被用來作為FOR-parcer的輸入集。
但在運行FOR命令之前,我們應該將替換為
用空格( 外引號):
語法。%variable:StrToFind=NewStr%
這些空格在我們的FOR決議器中成為分隔符。
要從一個單字母變數中自動移除引號,請使用符號~
語法。%~1
所以我們有了下一段代碼:
set var="foo
bar"
for %%A IN (%var:
=" "%)做 @echo=%%~a
P.S. 正如jeb真正說過的那樣,代碼中的特殊符號將無法正常作業。*, ?, %%在變數內容中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/315755.html
標籤:
