Batch file 如何禁用“for/F”的“eol”和“delims”选项?

Batch file 如何禁用“for/F”的“eol”和“delims”选项?,batch-file,for-loop,cmd,Batch File,For Loop,Cmd,带有/F开关的for命令用于解析文本字符串行(文本字符串、从文本文件读取或从命令行输出检索),并将每个字符串解析为一个或多个标记 我如何才能得到一行文字,因为它是,没有任何字符被替换,也没有任何行被忽略 我知道for/F“delims=“%L in(*)do echo”。%L“返回未编辑的每个已解析(非空)行。但是,由于eol选项默认为,以该字符开头的每一行都将被忽略。 如果我对/F“tokens=*eol=“%L in(*)do echo.”%L“,我将禁用eol选项[Edit:此声明不正确,

带有
/F
开关的
for
命令用于解析文本字符串行(文本字符串、从文本文件读取或从命令行输出检索),并将每个字符串解析为一个或多个标记

我如何才能得到一行文字,因为它是,没有任何字符被替换,也没有任何行被忽略

我知道
for/F“delims=“%L in(*)do echo”。%L“
返回未编辑的每个已解析(非空)行。但是,由于
eol
选项默认为
,以该字符开头的每一行都将被忽略。
如果我对/F“tokens=*eol=“%L in(*)do echo.”%L“
,我将禁用
eol
选项[Edit:此声明不正确,
“eol=“
不禁用
eol
选项,但它将
”定义为
eol
字符!],但是
delims
选项默认为空格和制表符,因此所有前导空格和/或制表符都将被删除。
(在批处理文件中使用
%%L
*
代表此处的任何有效文本字符串源。)

换句话说,我的问题是:有没有办法指定no
delims
no
eol
字符

我试图指定两个选项字符串(
“eol=”“delims=“
”),但这样会导致语法错误。选项字符串
“eol=delims=“
”也是如此

注意:标记化时,即设置
delims
选项时,此问题不会持续存在,因为应用该选项的优先级似乎高于
eol
(奇怪但幸运的是),因此您可以“隐藏”“
eol
delims
后面,通过将
delims
字符也指定为
eol

1)您将永远无法强制bat不要行。这可以通过管道传输到
findstr/R/N“^”
命令并使用
“tokens=1*delims=:”等选项来解决(某种程度上)
并仅获取第二个令牌

2) 要同时停用,可以使用以下语法:

For /f tokens^=*^ delims^=^ eol^= %%a in (file.txt) do echo.%%a

虽然空行仍然会被忽略。

1)是的,我知道空行会被跳过;围绕usinf
findstr
的工作是一个好主意,尽管当一行以
开头时失败了:
;2) 非常感谢这种语法,我以前从未见过这种语法;这是否将空格定义为分隔符??翻译成标准的引用版本后,它会读为
“tokens=*delims=eol=“
”,对吗?ad 2)我刚刚发现
“[…]eol=“
定义为行尾字符。(这有多愚蠢??);因此,再次感谢对非引用版本的提示!!我还发现,
delims
必须是最后一个选项,只有在您想定义一个空格作为分隔符的情况下;因此,在这种情况下,当您想将它与no
eol
一起使用时,唯一的机会是提供
eol^=^^delims^=^
;这是正确的,还是有sim卡pler(更清晰)变体?
tokens^=*^
没有坏处,但也没有任何用途。您只需要
for/f delims^=eol^=%%a in…
@aschipfl 1)使用
findstr/n
可以构建一个,因为每一行都以一个数字开头,您不会遇到任何问题2)您不需要换行版本,
delims^=^虽然。谢谢,@jeb!1)我的意思是
findstr/N
导致
delims=:
失败,但我没有想到
var:::=:
扩展;2)没有
eol
但是
delims=
需要换行版本,对吗?