Batch file 禁用eol,将delims设置为linefeed或newline以启用行号标记化 前言 我正在使用批处理来完成此操作 尽管在这个主题上有很多“相关”的问题,但这个问题是不同的/不是重复的,因为我想标记行,而不仅仅是“逐行阅读” 我在做什么
我想要一种简单的方法来指定我想要解析的行,我认为最好的方法是使用FOR循环的tokens选项。问题在于,默认情况下,令牌由eol设置(默认为换行符)和delims设置(默认为空格)分割。这对于大多数用例来说都很好,但是我想标记每一行。这将使我能够轻松干净地做很多我想做的事情 我怎么试过的 无论如何,我已经发现可以通过在FOR选项中执行eol^=来禁用eol字符。问题是,我找不到需要在delims=中指定的实际字符,以将分隔符设置为等于换行符、换行符或任何其他仅表示新行的字符。我不想简单地逐行处理,我想标记每一行。这很重要,因为像这样的问题: 这是: 不要申请。此外,我发现了这一点,但答案再次不符合我的实际需要 他们不适用的原因是因为他们要求逐行读取文件。我问的是如何标记每一行。这是不同的,因为逐行读取可以通过禁用delims和eol来完成,或者通过将delims设置为找到的第一个字符/将其设置为空(执行“delims=”)。这不是我想要的,因为我想启用delims,我想让它拆分每一行,而不是eol拆分每一行 你为什么要这么做? 在一些背景故事中,我打算使用skip命令,但是forloop的手册页上说skip选项只会跳到指定的行,不允许你说;跳过三行,读一行,然后再跳过几行,或者按行号跳过。我可以只使用一个forloop来提取一行,然后有更多的forloop,或者用计数器和嵌套for循环来做一些复杂的事情,但是如果我可以简单地标记每一行,那就容易多了 这就是我想要的 实际上,我想要的是:Batch file 禁用eol,将delims设置为linefeed或newline以启用行号标记化 前言 我正在使用批处理来完成此操作 尽管在这个主题上有很多“相关”的问题,但这个问题是不同的/不是重复的,因为我想标记行,而不仅仅是“逐行阅读” 我在做什么,batch-file,for-loop,token,newline,Batch File,For Loop,Token,Newline,我想要一种简单的方法来指定我想要解析的行,我认为最好的方法是使用FOR循环的tokens选项。问题在于,默认情况下,令牌由eol设置(默认为换行符)和delims设置(默认为空格)分割。这对于大多数用例来说都很好,但是我想标记每一行。这将使我能够轻松干净地做很多我想做的事情 我怎么试过的 无论如何,我已经发现可以通过在FOR选项中执行eol^=来禁用eol字符。问题是,我找不到需要在delims=中指定的实际字符,以将分隔符设置为等于换行符、换行符或任何其他仅表示新行的字符。我不想简单地逐行处理
FOR /F "tokens=1,3 delims=<linefeed go here> eol^=" %%A IN ('command
that prints out multiple lines') DO (echo %%A)
在DOStips论坛上,我不太明白那里发生了什么。他们是否将换行设置为其他字符?看起来他们也在试图同时使用和禁用熟食店,这对我来说毫无意义
额外:如果我禁用eol错误或其他东西会干扰我当前的方法,请告诉我,如果你能告诉我一个手册或一些我很乐意告诉自己的东西,这样我就不会占用你的时间
为什么这很重要?
因为它使读取文件和从命令输出中只获取所需的行变得更加容易,而不必进行防御,所以将您甚至不需要的行+空格标记化,只获取您需要的行。这样做可以让我直接说(我只想要这些行),我甚至不需要goto或任何奇怪的东西来打破forloop,一旦我抓到了我需要的一切
P>一个完美的例子是考虑下面的文本行,比如说我想从这个文件中只获取E和I。
FOR /F "tokens=*" %%A IN ('netsh firewall show portopening') DO (echo %%A)
更新2
发现这个怪物是从
实际工作情况与预期相符(由于某些原因,请确保保留间距,因为弄乱会导致上述内容不起作用,而应打印,此处应插入换行符^^^^
)。唯一的问题是我似乎无法让它在FOR循环中工作。我一直在努力:
FOR /F "tokens=* delims=%NL% eol^=" %%A IN ('netsh firewall show
portopening') DO (echo %%A)
有变化,但似乎什么都不起作用。它只是说eol^=“不是预期的
,如果我删除”“
它说语法不正确
。我知道我需要引号,我非常确定eol^=
语法是正确的,所以我认为它与这些东西没有直接关系。我认为delims发生了一些奇怪的事情,导致了不反映实际问题的严重错误
更新3,兔子洞
请注意,您需要上面的NL或NLM定义来尝试运行这些(尽管它们不起作用)
我试过:
for /F "tokens^=1,2 delims^= eol^=^^!NLM^^!" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F ^"tokens^=1,2 delims^=!NLM! eol^=^" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F "tokens=1,2 delims^=!NLM! eol=" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F "tokens=1,2 delims^=!NLM!" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F "tokens=1,2 delims= eol=" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F "delims=!NLM! eol=" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F "delims^=!NLM! eol=" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F "delims^=!NLM! eol^=" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F ^"delims^=!NLM! eol^=^" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F ^"delims^=^!NLM^! eol^=^" %%i in ('netsh firewall show
portopening') do (echo %%i)
还有其他一些方法,我也用%NLM%
尝试了以上所有方法
我试过使用!NL代码>以及所有这些的%NL%
。我尝试过省略选项、重新组合选项、重新排序选项、转义、不转义以及所有其他有趣的组合。大多数情况下都会导致语法错误,有些打印整个输出时使用标记=*,有些打印一些没有意义的东西(奇怪的未标记的基于列的输出,有没有意义的拆分),但它似乎从来没有按标记只打印某些行。此外,手册页还显示eol
默认值为代码>并且它用于确定哪些行是注释,而不是结束一行。我只想让分隔符是一个换行符,其他的都不要做任何奇怪的事情。我
FOR /F "tokens=*" %%A IN ('netsh firewall show portopening') DO (echo %%A)
set NLM=^
set NL=^^^%NLM%%NLM%^%NLM%%NLM%
echo There should be a newline%NL%inserted here.
FOR /F "tokens=* delims=%NL% eol^=" %%A IN ('netsh firewall show
portopening') DO (echo %%A)
for /F "tokens^=1,2 delims^= eol^=^^!NLM^^!" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F ^"tokens^=1,2 delims^=!NLM! eol^=^" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F "tokens=1,2 delims^=!NLM! eol=" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F "tokens=1,2 delims^=!NLM!" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F "tokens=1,2 delims= eol=" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F "delims=!NLM! eol=" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F "delims^=!NLM! eol=" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F "delims^=!NLM! eol^=" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F ^"delims^=!NLM! eol^=^" %%i in ('netsh firewall show
portopening') do (echo %%i)
for /F ^"delims^=^!NLM^! eol^=^" %%i in ('netsh firewall show
portopening') do (echo %%i)
set "lines=1 3"
FOR /F "tokens=1* delims=:" %%A IN ('command prints lines ^| findstr /N "^"') DO (
FOR /F "tokens=1*" %%X in ("!lines!") do (
IF "%%A" EQU "%%X" (
echo %%B
set "lines=%%Y"
)
)
)
@echo off
setlocal EnableDelayedExpansion
set "lines=2 3"
set "selected="
FOR /F "tokens=1* delims=:" %%A IN ('type test.txt ^| findstr /N "^"') DO (
FOR /F "tokens=1*" %%X in ("!lines!") do (
IF "%%A" EQU "%%X" (
set "selected=!selected! %%B"
set "lines=%%Y"
)
)
)
for /F "tokens=2,6" %%A in ("%selected%") do (
echo Token 2: "%%A"
echo Token 6: "%%B"
)
a b c
d e f
g h i
j k l
Token 2: "e"
Token 6: "i"