批处理如何使用未知数量的返回参数处理动态FOR / F循环结果

时间:2018-03-20 14:16:37

标签: windows batch-file for-loop delimiter

我有一个在xp中运行良好但在windows10中失败的功能,因为我不能使用TAB作为分隔符,只有SPACE

setlocal EnableDelayedExpansion
...
CALL :myfunc VARtoSET KEY VALUE

:myfunc
FOR /F "usebackq skip=2 tokens=3 delims=    " %%A IN (`REG QUERY "%~2" /v "%~3"`) DO CALL SET "%~1=%%A"
goto :eof
...
endlocal

它正确返回数据并扩展可能的变量,如(CALL SET)

然而,如果我尝试在Windows 10上使用它...它失败 - 似乎w10不喜欢文字TAB,因为我使用文字TAB绝对没有结果。如果我删除了分隔符,它就变成了一个空格(不是我在某些地方读取的TAB和/或空格)但我不能使用空格作为值,或者数据可能包含空格本身并且会破坏目的。

1 个答案:

答案 0 :(得分:0)

好的,经过深思熟虑后,我不会从我对w10的reg查询中获得任何TAB分隔符(xp确实​​在输出中使用TAB)我决定按照以下方式解决此问题

我们有一个KEY_VALUE,可能有空格(%3) 我们得到一个KEY_DATA结果,可能有空格(%1)

为了获得感兴趣的令牌的正确偏移量,我们计算传递给它的KEY_VALUE的元素,增加元素上的计数器

:myfunc
SET /A tk_offset=1
FOR %%A IN (%~3) DO SET /A tk_offset+=1

忽略包含DATA_TYPE的第一个返回参数(%tk_offset%),并使用(*)其余部分作为%% B

FOR /F "skip=2 tokens=%tk_offset%,*" %%A IN ('REG QUERY "%~2" /v "%~3"') DO CALL SET "%~1=%%B"
GOTO :eof

我们将结果分配给%1并使用CALL SET

扩展可能的变量

适用于winxp和amp; win10