Да, tokens=*
и delims=
различны:
delims=
возвращает всю строку неотредактированной;
tokens=*
возвращает строку с удаленными начальными разделителями ( SPACE и TAB по умолчанию);
tokens=* delims=
ведет себя точно так же, как delims=
;
Обратите внимание, что пустые строки всегда пропускаются. Также строки, начинающиеся с ;
, игнорируются, так как этот символ является значением по умолчанию eol
.
Если указано tokens=*
и строка содержит только разделители, цикл for /F
повторяется и мета-переменная возвращает пустую строку. Как только указан любой номер токена (например, tokens=3
, tokens=1,3
, tokens=2-3
, tokens=2*
и т. Д.), Пропускаются только строки с разделителями.
Однако строка, содержащая один или несколько разделителей плюс символ eol
плюс произвольная строка, игнорируется, даже если указана tokens=*
.
Для доказательства я провел несколько тестов, используя следующий текстовый файл sample.txt
(обратите внимание, что строка 2 nd пуста, строка 4 th содержит четыре ПРОБЕЛЫ ; нажмите кнопку 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=*
.