[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何获取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: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
复制代码

TOP

回复 2# 路过


十分感谢

TOP

回复 2# 路过

搭车请教一下,如何做一个随机显示文本的内容。比如23行的文本,
随机显示其中一行,sleep一秒,然后随机显示下一行,按任意键退出。
批处理可以做到吗?

TOP

本帖最后由 路过 于 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
复制代码

TOP

回复 2# 路过


    find /v /c “字符串”
这条命令的意思是不是代表不包含“字符串”的行数

TOP

回复 6# lancer

TOP

回复 7# 路过


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

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

TOP

回复 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
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表