【发布时间】:2023-01-18 21:15:25
【问题描述】:
我有一个简单的 .bat 内容:
@echo off
set "var=VAR1?VAR2?VAR3"
echo.%var%
echo.
for /F "delims=?" %%H in ('echo.%var%') do echo.%%~H
我希望得到以下输出:
VAR1?VAR2?VAR3
VAR1
VAR2
VAR3
相反,我得到:
VAR1?VAR2?VAR3
VAR1
^ 注意一个尾随的空新行
尝试使用不同的定界符,usebackq,赋予 eol 字符,运行另一个具有不同参数的 for 循环,还有许多其他事情;不同的变量名,不同的文件名,setlocal w/o 和 w/ delayed expansion;没有成功。 如果我包含 tokens=1,2 参数,它会将 VAR1 打印到 %%H 中,将 VAR2 打印到 %%I 中,但我需要它是“动态的”,为我的 %var% 提供每个元素。
编辑:最让我困惑的是,如果不是将我的元素写入一个由 a 分隔的变量?,我把它写到一个文件中,每个元素在它自己的行中,然后用 "for /F "delims=*" %%H in ('type "VAR.txt"') 逐行读取文件。 ..” 它工作完美。是因为“delims=*”,还是有更高的权力在搞乱我?从 FOR 的角度来看,我看不出有什么不同。如果默认情况下它应该只给我第一个标记,为什么它会给出文件中的每个标记?作为新行的标记是否与作为任何其他字符的标记相同?
【问题讨论】:
-
您只要求默认(第一个分隔标记,
%%H)。如果您想要每个令牌,您将需要知道有多少个令牌,或者以不同的方式执行任务。例如:For %%G In (%var:?=,%) Do Echo %%G。 -
使用双引号设置变量,即
set "var="VAR1" "VAR2" "VAR3"",然后只需使用for %%H in (%var%) do echo %%~H,这样,您也可以使用空格,即set "var="VAR 1" "VAR 2" "VAR 3"" -
可悲的是,我必须在我的元素之间使用不能出现在文件名中的定界符,所以像 [space]#+%= 和其他的东西是不可能的。
-
那么你只有一个选择,计算分隔字符的数量,然后动态设置标记。
标签: for-loop batch-file cmd token