【发布时间】:2018-03-20 14:16:37
【问题描述】:
我有一个在 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 和/或空格)但是我不能将空格用作分隔符作为值,否则数据本身可能包含空格并且会破坏目的。
【问题讨论】:
-
"... tokens=2,* ..." %%A in ... DO CALL SET "%~1=%%B" -
skip不是必需的,因为无论如何%~1将从输出的最后一行设置。您还可以将反引号`更改为单引号',并删除usebackq选项。 -
这将在键值中没有空格时起作用 - 跳过对于此目的来说是完全足够的
-
删除
CALL,因为它充其量是多余的,但它也会给你带来讨厌的副作用 -
您的意思是可以在没有它的情况下执行命令,还是您的意思是在上述几行的上下文中?如果没有前面的调用,它只会成为标签而不是函数调用,不是吗?
标签: windows batch-file for-loop delimiter