![如何使用 DOS 批处理(CMD)计算第一行文本中的管道数](https://linux22.com/image/1594863/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20DOS%20%E6%89%B9%E5%A4%84%E7%90%86%EF%BC%88CMD%EF%BC%89%E8%AE%A1%E7%AE%97%E7%AC%AC%E4%B8%80%E8%A1%8C%E6%96%87%E6%9C%AC%E4%B8%AD%E7%9A%84%E7%AE%A1%E9%81%93%E6%95%B0.png)
我有一个类似于以下内容的输入文本文件:
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