如何使用 DOS 批处理(CMD)计算第一行文本中的管道数

如何使用 DOS 批处理(CMD)计算第一行文本中的管道数

我有一个类似于以下内容的输入文本文件:

a|b|c|d|e
1|2|3|4|5
6|7|8|9|10

|我想计算第一行中的管道数( )。

预期输出:4

我只能使用批处理脚本。PowerShell 不是一个选项。

答案1

这只纯蝙蝠可以做这样的工作:

@echo off & setlocal enabledelayedexpansion

for /f %%i in (.\input.txt)do set "_line=%%i"&& (
     for %%p in ("!_line:|=" "!")do set /a "_cnt+=1")&& set/a "_cnt-=1"& echo/!_cnt! & goto:nxt
    )

:nxt

更新: 我只是想使用匹配@mael'解决方案,或者,我只是尝试使用我的解决方案@mael'解决方案,无论如何,英语很难向我解释..


@echo off & setlocal enabledelayedexpansion

for /f %%i in (.\input.txt)do (
     set "_line=%%i"&& (for %%p in ("!_line:|=" "!")do set /a "_cnt+=1")&& set/a "_cnt-=1"& goto:next
    )

:next
echo/ !_cnt!

答案2

替代方法:

@echo off

set "src=C:\location\of\text\file.txt"

setlocal enabledelayedexpansion
set /p line=<"%src%"

set "count=-1"
for %%a in ("%line:|=" "%") do set /A count+=1

echo %count%

答案3

您可以执行以下操作:

  • set /P读取文本文件的第一行input.txt(预计短于 1024 个字符或字节,包括终止换行符);
  • echo读取的第一行,但作为 Unicode 文本,这是通过启动新的cmd实例使用选项/U;这基本上在每个字符后插入空字节;
  • find命令完成计数工作,它将空字节解释为换行符,因此它会接收单个字符的行(例如,,,,,,,,,,,,就您a的样本而言);|b|c|d|e

以下是示例代码:

set "CNT=0" & for /F %%C in ('
    ^< "input.txt" set /P LINE=^& cmd /U /V /C echo(!LINE!^| find /C "|"
') do set "CNT=%%C"
echo(%CNT%

使用示例输入文件,此脚本将返回:

4

相关内容