gpt4 book ai didi

windows - 使用 "tokens=*"或 "delims="调用 FOR 在功能上是否等效?

转载 作者:可可西里 更新时间:2023-11-01 14:22:03 26 4
gpt4 key购买 nike

考虑以下两个循环:

for /f "tokens=*" %%a in ('dir /b %TEMP%') do (
echo %%a
)

for /f "delims=" %%a in ('dir /b %TEMP%') do (
echo %%a
)

如果我想要的结果是向变量 %%a 提供正在评估的整行的内容,那么选项 tokens=*delims = 功能等效?

在任何情况下,在给定特定输入的情况下,我可能会得到不同的输出吗?

我想知道这两个选项是否应该始终结合使用以保证覆盖所有潜在案例,或者指定两者是否多余。

最佳答案

是的,tokens=*delims= 是不同的:

  • delims= 返回未编辑的整行;
  • tokens=* 返回删除任何前导分隔符(SPACETAB 默认情况下)的行;
  • tokens=* delims= 的行为方式与 delims= 完全相同;

请注意空行总是被跳过。以 ; 开头的行也会被忽略,因为该字符是默认的 eol

如果指定了 tokens=* 并且一行仅包含定界符,则 for/F 循环迭代并且元变量返回一个空字符串。只要提供了任何 token 编号(如 tokens=3tokens=1,3tokens=2-3 tokens=2* 等),仅分隔符的行被跳过。
但是,即使提供了 tokens=*,包含一个或多个定界符以及 eol 字符和任意字符串的行也会被忽略。


作为证据,我使用以下文本文件 sample.txt 做了一些测试(注意第 2nd 行是空的,第 4th 行包含四个 SPACE;单击此答案下方的 edit 按钮并查看原始文本):

text_without_delimiters

text with delimiters

text with leading and trailing delimiters
; comment text
; comment text with leading delimiters
text plus ; comment text

下面是我在控制台上所做的以及相应的返回字符串:

>>> for /F %I in (sample.txt) do @echo "%I"
"text_without_delimiters"
"text"
"text"
"text"

>>> for /F "tokens=*" %I in (sample.txt) do @echo "%I"
"text_without_delimiters"
"text with delimiters"
""
"text with leading and trailing delimiters "
"text plus ; comment text"

>>> for /F "delims=" %I in (sample.txt) do @echo "%I"
"text_without_delimiters"
"text with delimiters"
" "
" text with leading and trailing delimiters "
" ; comment text with leading delimiters"
"text plus ; comment text"

>>> for /F "tokens=* delims=" %I in (sample.txt) do @echo "%I"
"text_without_delimiters"
"text with delimiters"
" "
" text with leading and trailing delimiters "
" ; comment text with leading delimiters"
"text plus ; comment text"

>>> for /F "tokens=3" %I in (sample.txt) do @echo "%I"
"delimiters"
"leading"
";"

>>> for /F "tokens=1,3" %I in (sample.txt) do @echo "%I" "%J"
"text_without_delimiters" ""
"text" "delimiters"
"text" "leading"
"text" ";"

>>> for /F "tokens=2-3" %I in (sample.txt) do @echo "%I" "%J"
"with" "delimiters"
"with" "leading"
"plus" ";"

>>> for /F "tokens=2*" %I in (sample.txt) do @echo "%I" "%J"
"with" "delimiters"
"with" "leading and trailing delimiters "
"plus" "; comment text"

所以唯一真正奇怪和出乎意料的输出是单独使用 tokens=* 选项的 "" 行。

关于windows - 使用 "tokens=*"或 "delims="调用 FOR 在功能上是否等效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51006252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com