Board logo

标题: [文本处理] [已解决]批处理查找txt中符合条件的内容,并执行操作? [打印本页]

作者: 滴血雄鹰    时间: 2020-6-16 08:40     标题: [已解决]批处理查找txt中符合条件的内容,并执行操作?

本帖最后由 滴血雄鹰 于 2020-6-16 21:41 编辑

查找txt中符合条件的内容,并执行操作?
  1. @echo off
  2. for /L %%i in (2,1,4) do (ping -n 1 -w 40 192.168.11.%%i >nul && echo 192.168.11.%%i ping入成功 || echo 192.168.11.%%i ping入失败 && echo 192.168.11.%%i >IP.txt)
  3. for /L %%i in (2,1,4) do (ping -n 1 -w 40 192.168.15.%%i >nul && echo 192.168.15.%%i ping入成功 || echo 192.168.15.%%i ping入失败 && echo 192.168.15.%%i >>IP.txt)
  4. for /L %%i in (2,1,4) do (ping -n 1 -w 40 192.168.19.%%i >nul && echo 192.168.19.%%i ping入成功 || echo 192.168.19.%%i ping入失败 && echo 192.168.19.%%i >>IP.txt)
  5. for /L %%i in (2,1,4) do (ping -n 1 -w 40 192.168.27.%%i >nul && echo 192.168.27.%%i ping入成功 || echo 192.168.27.%%i ping入失败 && echo 192.168.27.%%i >>IP.txt)
  6. for /L %%i in (2,1,4) do (ping -n 1 -w 40 192.168.31.%%i >nul && echo 192.168.31.%%i ping入成功 || echo 192.168.31.%%i ping入失败 && echo 192.168.31.%%i >>IP.txt)
复制代码
通过上面代码未Ping通的IP存入IP.txt


想要在上面的代码下面添加代码:(查找IP.txt中符合条件的内容,并执行操作?)
如果在IP.txt中,同一IP段(如出现下面形式192.168.11.X)有超过3个以上出现,就打开某个声音文件报警(如打开a.mp3),反之打开IP.txt。
192.168.11.2
192.168.11.3
192.168.11.4
作者: Batcher    时间: 2020-6-16 09:53

回复 1# 滴血雄鹰
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in ('type "IP.txt"') do (
  4.     set /a _%%~ni+=1
  5.     if !_%%~ni! equ 3 (
  6.         start "" "C:\test\a.mp3"
  7.         goto :eof
  8.     )
  9. )
  10. start "" "IP.txt"
复制代码

作者: 滴血雄鹰    时间: 2020-6-16 12:43

本帖最后由 滴血雄鹰 于 2020-6-16 12:50 编辑

回复 2# Batcher


@echo off
:time
setlocal enabledelayedexpansion
for /f %%i in ('type "IP.txt"') do (
    set /a _%%~ni+=1
    if !_%%~ni! equ 3 (
        start "" "C:\test\a.mp3"
        goto :eof
    )
)
start "" "IP.txt"

@echo  off
for /l %%i in (2,-1,0) do (
cls
echo  等待%%i秒后,重新ping...
ping 127.1 -n 2 >nul
)

goto time



我加了红字的代码,在第3次自动运行时,就出错。即使IP.txt中只有一行IP,也会弹出报警(运行a.mp3)?
作者: Batcher    时间: 2020-6-16 14:42

回复 3# 滴血雄鹰


这里下面再加一行
start "" "IP.txt"
endlocal
作者: 滴血雄鹰    时间: 2020-6-16 15:11

回复 4# Batcher

加了endlocal后,下面代码无法运行了?

@echo  off
for /l %%i in (2,-1,0) do (
cls
echo  等待%%i秒后,重新ping...
ping 127.1 -n 2 >nul
)

goto time
作者: Batcher    时间: 2020-6-16 17:00

回复 5# 滴血雄鹰


    请把所有的 @echo off 删掉再执行,看看是哪一行出现了问题。
作者: 滴血雄鹰    时间: 2020-6-16 19:31

本帖最后由 滴血雄鹰 于 2020-6-16 20:26 编辑

回复 6# Batcher



代码运行结果:
如果在IP.txt中,
低于3个IP,可以循环运行。
但如果有3个IP在IP.txt中,可以弹出报警(即运行a.mp3),但是BAT就退出了,不循环运行。
我修改了下面的红字,就可以循环了。


@echo off
:start
setlocal enabledelayedexpansion
for /f %%i in ('type "IP.txt"') do (
    set /a _%%~ni+=1
    if !_%%~ni! equ 3 (
        start "" "C:\test\a.mp3"&&goto time
        goto :eof
    )
)
start "" "IP.txt"

:time
@echo  off
for /l %%i in (2,-1,0) do (
cls
echo  等待%%i秒后,重新ping...
ping 127.1 -n 2 >nul
)

goto start


另外:(查找IP.txt中符合条件的内容,并执行操作?)
如果在IP.txt中,只要有一个IP地址,就打开某个声音文件报警(如打开a.mp3),反之继续运行代码。这个代码怎么改?是不是将 if !_%%~ni! equ 3 (  改成 if !_%%~ni! equ 1 (?

@echo off
:start
for /L %%i in (2,1,4) do (ping -n 1 -w 40 192.168.11.%%i >nul && echo 192.168.11.%%i ping入成功 || echo 192.168.11.%%i ping入失败 && echo 192.168.11.%%i >IP.txt)
for /L %%i in (2,1,4) do (ping -n 1 -w 40 192.168.15.%%i >nul && echo 192.168.15.%%i ping入成功 || echo 192.168.15.%%i ping入失败 && echo 192.168.15.%%i >>IP.txt)
for /L %%i in (2,1,4) do (ping -n 1 -w 40 192.168.19.%%i >nul && echo 192.168.19.%%i ping入成功 || echo 192.168.19.%%i ping入失败 && echo 192.168.19.%%i >>IP.txt)
for /L %%i in (2,1,4) do (ping -n 1 -w 40 192.168.27.%%i >nul && echo 192.168.27.%%i ping入成功 || echo 192.168.27.%%i ping入失败 && echo 192.168.27.%%i >>IP.txt)
for /L %%i in (2,1,4) do (ping -n 1 -w 40 192.168.31.%%i >nul && echo 192.168.31.%%i ping入成功 || echo 192.168.31.%%i ping入失败 && echo 192.168.31.%%i >>IP.txt)

@echo off
setlocal enabledelayedexpansion
for /f %%i in ('type "IP.txt"') do (
    set /a _%%~ni+=1
    if !_%%~ni! equ 1 (
        start "" "C:\test\a.mp3"&&goto time
        goto :eof
    )
)

:time
@echo  off
for /l %%i in (2,-1,0) do (
cls
echo  等待%%i秒后,重新ping...
ping 127.1 -n 2 >nul
)

goto start
作者: WHY    时间: 2020-6-16 20:50

  1. @echo off
  2. :start
  3. setlocal enabledelayedexpansion
  4. for /f %%i in ('type "IP.txt"') do (
  5.     set /a _%%~ni+=1
  6.     if !_%%~ni! equ 3 (
  7.         endlocal
  8.         start "" "c:\test\a.mp3"
  9.         goto :time
  10.     )
  11. )
  12. endlocal
  13. start "" "IP.txt"
  14. :time
  15. ...
  16. goto :start
复制代码

作者: 滴血雄鹰    时间: 2020-6-16 21:30

回复 8# WHY


如果在IP.txt中,只要有一个IP地址,就打开某个声音文件报警(如打开a.mp3),反之继续运行代码。这个代码怎么改?是不是将 if !_%%~ni! equ 3 (  改成 if !_%%~ni! equ 1 (?
作者: Batcher    时间: 2020-6-17 10:44

回复 9# 滴血雄鹰
  1. @echo off
  2. for /f %%i in ('type "IP.txt"') do (
  3.     start "" "C:\test\a.mp3"
  4.     goto :time
  5. )
  6. :time
  7. for /l %%i in (2,-1,0) do (
  8. ......
复制代码

作者: 滴血雄鹰    时间: 2020-6-17 12:08

本帖最后由 滴血雄鹰 于 2020-6-18 00:02 编辑

回复 10# Batcher


在IP.txt中,这个代码没有IP地址,也会打开某个声音文件报警(如打开a.mp3)。我修改了下8楼的代码,可以使用了。




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