Board logo

标题: [系统相关] 批处理命令for循环嵌套,帮忙看看哪里不对?在线等待 [打印本页]

作者: Sgr    时间: 2014-3-27 21:15     标题: 批处理命令for循环嵌套,帮忙看看哪里不对?在线等待

通过查找5100端口找到进程PID并KILL掉它,下面这段代码可以实现没问题
  1. FOR /F "tokens=5 delims= " %%P IN ('netstat -ano | findstr 5100') DO TaskKill.exe /F /PID %%P
复制代码
可是问题来了,我如果有多个端口,我总不能每个写一行吧,比如我有5100 5200 5300,我要写三行,这太不好了.
我该如何嵌套FOR循环,依次把这三个端口都KILL掉.我尝试了一下下面的写法,但是报错,求大神们给个答案..如何改..

我是想把多个端口写到数组里,然后遍历它去取,然后依次KILL掉,可是下面的写法会报错.
  1. FOR %%I IN (5100 5200 5300) DO (
  2.     FOR /F "tokens=5 delims= " %%P IN ('netstat -ano | findstr %%I') DO TaskKill.exe /F /PID %%P
  3. )
复制代码

作者: DAIC    时间: 2014-3-27 21:24

  1. @echo off
  2. for /f "tokens=5" %%p in ('netstat -ano ^| findstr "\<5100\> \<5200\> \<5300\>"') do (
  3.     taskkill.exe /f /pid %%p
  4. )
复制代码

作者: Sgr    时间: 2014-3-27 21:29

DAIC能帮忙解释一下吗..有点儿不懂..对BAT不太熟悉..非常感谢..
作者: Sgr    时间: 2014-3-27 21:32

我是想知道如何我把它们放在数组里,如果嵌套循环..因为你这样的写法,如果我有五个端口乞不是要写很长..
作者: Sgr    时间: 2014-3-27 21:35

findstr "\<5100\> \<5200\> \<5300\>",这里为什么这么写..
作者: DAIC    时间: 2014-3-27 21:36

回复 4# Sgr
  1. @echo off
  2. for %%i in (5100 5200 5300) do (
  3.     for /f "tokens=5" %%p in ('netstat -ano ^| findstr "\<%%i\>"') do (
  4.         taskkill.exe /f /pid %%p
  5.     )
  6. )
复制代码

作者: Sgr    时间: 2014-3-27 21:39

DAIC,我只有两个疑问,麻烦你帮我解答一下,我确实不明白.. ^| 这个地方为什么要转义,|本身就表示管道,还转义干什么. \<\>这里这么用又是为什么.. 不胜感激..
作者: Sgr    时间: 2014-3-27 21:41

敬等你回复..谢谢..
作者: Sgr    时间: 2014-3-27 21:43

DAIC帮忙解释一下呗,不然晚上觉都睡不好..非常感谢..
作者: Sgr    时间: 2014-3-27 22:06

刚才查了一下大至明白了..可是就是有一点不明白 | 管道前面加个转义干什么..明明findstr就要从管道里提取数据.
作者: Sgr    时间: 2014-3-27 22:06

刚才查了一下大至明白了..可是就是有一点不明白 | 管道前面加个转义干什么..明明findstr就要从管道里提取数据.
作者: DAIC    时间: 2014-3-27 22:17

回复 11# Sgr


http://bbs.bathome.net/viewthread.php?tid=1290&page=2#pid6306
作者: DAIC    时间: 2014-3-27 22:18

\<\>这里这么用又是为什么

findstr命令的帮助里面有,你自己看看
findstr /?
作者: wangxiaodong    时间: 2014-4-2 23:58

试试这个
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. FOR %%i IN (5100 5200 5300) do(
  4. set r=%%i
  5. call :kill !r!
  6. )
  7. pause
  8. goto :eof
  9. :kill
  10. for /f "tokens=5" %%p in ('netstat -ano ^| findstr %1) do (
  11. taskkill.exe /f /pid %%p
  12. )
复制代码
1# Sgr





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