如何在每 (n) 行后插入空行?

4

我有这个脚本:

@ECHO OFF

(FOR /f tokens^=2^ delims^=^"  %%a IN ('findstr /l "\<SOMETHING=\>" FILE.vav') DO (Echo | Set /p =%%a,)) >> Results.txt

现在的结果看起来像这样:
SOMETHING, SOMETHING, SOMETHING, SOMETHING, SOMETHING, SOMETHING, SOMETHING, SOMETHING, SOMETHING, SOMETHING, SOMETHING, SOMETHING, SOMETHING, 

但是我需要在每5个结果后插入空行,因此结果应该像这样:

SOMETHING, SOMETHING, SOMETHING, SOMETHING, SOMETHING,
//blank line
SOMETHING, SOMETHING, SOMETHING, SOMETHING, SOMETHING,
// blank line
SOMETHING, SOMETHING, SOMETHING, 

可能的解决方案将涉及使用 FOR /LIF,但我无法琢磨出来。

2个回答

3

试一下这个:

ECHO OFF &SETLOCAL 
(FOR /f tokens^=2^ delims^=^"  %%a IN ('findstr /l "\<SOMETHING=\>" FILE.vav') DO (
    <NUL Set /p =%%a,
    SET /a counter+=1
    SETLOCAL ENABLEDELAYEDEXPANSION
    SET /a counter%%=5
    IF !counter! equ 0 ECHO(
    ENDLOCAL 
    )
)>Results.txt
TYPE results.txt

另外一个问题,您能否解释一下第6行的counter%%=5是什么意思?谢谢。 - user2606943
%% 是取模运算符(即除法的余数)。 - Endoro

0

由于标题吸引了更广泛的提问者

比这里所呈现的(Endoro已经完美回答了)

我想展示一种在读取文件时插入空行的解决方案:

@Echo off&SetLocal EnableDelayedExpansion
Set "File=%~1" & If not defined File (Echo No file name passed&Pause&Exit /B 1)
Set n=2
for /F "delims=" %%A in (
    'Findstr "^" %FILE%'
) do (
    Echo:%%A
    set /A "#+=1,#%%=n" & If !#!==0 Echo:
)

还有一个非常相似的命令,它可以处理另一个命令的输出,
这里是通过findstr过滤的sc命令:

@Echo off&SetLocal EnableDelayedExpansion
Set n=2
for /F "delims=" %%A in (
  'sc query ^| findstr "SERVICE_NAME DISPLAY_NAME"'
) do (
   Echo:%%A
   set /A "#+=1,#%%=n" & If !#!==0 Echo:
)
  • 变量n是不言自明的。
  • 不寻常但合法的变量#计算行数,取模除以n,如果为零则插入所需的空行。
  • 由于EnableDelayedExpansion,输出中的感叹号!会被删除。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接