Board logo

标题: [文本处理] 批处理如何获取find的行数,赋值给变量 [打印本页]

作者: alwenliu    时间: 2021-1-15 23:20     标题: 批处理如何获取find的行数,赋值给变量

比如a.txt里有三个进程号
7976
4456
6460

我用for循环读进来进行查询 netstat -ano | findstr %%p ;会得到几行数据,
我怎么统计有几行数据,并把行数赋值给一个变量呢
  1. for /f %%p in (Pid.txt) do (
  2.     netstat -ano | findstr %%p
  3. )
复制代码
图片显示对应的ID有4 行数据,我怎么计算是有4行数据,并把4赋值给一个变量.最好不要用临时文件的方法.新手向大神请教了
作者: 路过    时间: 2021-1-15 23:25

本帖最后由 路过 于 2021-1-15 23:31 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%p in (Pid.txt) do (set/a c=0
  4.     for /f "delims=" %%a in ('netstat -ano ^| findstr %%p') do (set/a c+=1)
  5.     echo;!c!
  6. )
  7. pause
复制代码
或者
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%p in (Pid.txt) do (
  4.     for /f "delims=" %%a in ('netstat -ano ^| findstr %%p ^| find /v /c ""') do (set c=%%a)
  5.     echo;!c!
  6. )
  7. pause
复制代码

作者: alwenliu    时间: 2021-1-15 23:33

回复 2# 路过


十分感谢
作者: netdzb    时间: 2021-1-16 04:17

回复 2# 路过

搭车请教一下,如何做一个随机显示文本的内容。比如23行的文本,
随机显示其中一行,sleep一秒,然后随机显示下一行,按任意键退出。
批处理可以做到吗?
作者: 路过    时间: 2021-1-16 09:59

本帖最后由 路过 于 2021-1-16 10:06 编辑

回复 4# netdzb
  1. @echo off
  2. pushd "%~sdp0"
  3. set filename=1.txt
  4. call :RanSTxt 1 %filename%
  5. ping/n 2 127.0>nul
  6. call :RanSTxt 1 %filename%
  7. pause
  8. exit
  9. :RanSTxt [sl] [file]
  10. ::sl最多显示多少行,file 文件名[不支持空格和特殊符号]
  11. setlocal enabledelayedexpansion
  12. set/a sl=%1
  13. set file=%2
  14. for /f %%a in ('type "%file%" ^| find /c /v ""') do (set al=%%a)
  15. set/a q=1+%random% %% %al%,w=q+sl,e=0
  16. for /f "skip=%q% delims=: tokens=1*" %%h in ('echo;^&findstr /in .* "%file%"')  do (echo;%%i
  17.     set/a e+=1
  18. if !e!==%sl% (endlocal&goto :eof))
  19. endlocal
  20. goto :eof
复制代码

作者: lancer    时间: 2021-1-16 10:43

回复 2# 路过


    find /v /c “字符串”
这条命令的意思是不是代表不包含“字符串”的行数
作者: 路过    时间: 2021-1-16 11:11

回复 6# lancer

作者: lancer    时间: 2021-1-16 13:17

回复 7# 路过


   /V  显示所有未包含指定字符串的行
  /C  仅显示包含字符串的行数

说实话,单独看这2个参数的意思,真的很难联想到一起使用时是不包含指定字符串的行数。如果不是你的这个批处理,始终都无法理解。
作者: Batcher    时间: 2021-1-16 19:56

回复 2# 路过


也可以直接获取 findstr /n 的行号
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%p in (Pid.txt) do (
  4.     for /f "delims=:" %%a in ('netstat -ano ^| findstr /n %%p') do (
  5.         set c=%%a
  6.     )
  7.     echo %%p --- !c!
  8. )
  9. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2