标题: [系统相关] 批处理命令for循环嵌套,帮忙看看哪里不对?在线等待 [打印本页]
作者: Sgr 时间: 2014-3-27 21:15 标题: 批处理命令for循环嵌套,帮忙看看哪里不对?在线等待
通过查找5100端口找到进程PID并KILL掉它,下面这段代码可以实现没问题- FOR /F "tokens=5 delims= " %%P IN ('netstat -ano | findstr 5100') DO TaskKill.exe /F /PID %%P
复制代码
可是问题来了,我如果有多个端口,我总不能每个写一行吧,比如我有5100 5200 5300,我要写三行,这太不好了.
我该如何嵌套FOR循环,依次把这三个端口都KILL掉.我尝试了一下下面的写法,但是报错,求大神们给个答案..如何改..
我是想把多个端口写到数组里,然后遍历它去取,然后依次KILL掉,可是下面的写法会报错.- FOR %%I IN (5100 5200 5300) DO (
- FOR /F "tokens=5 delims= " %%P IN ('netstat -ano | findstr %%I') DO TaskKill.exe /F /PID %%P
- )
复制代码
作者: DAIC 时间: 2014-3-27 21:24
- @echo off
- for /f "tokens=5" %%p in ('netstat -ano ^| findstr "\<5100\> \<5200\> \<5300\>"') do (
- taskkill.exe /f /pid %%p
- )
复制代码
作者: 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 - @echo off
- for %%i in (5100 5200 5300) do (
- for /f "tokens=5" %%p in ('netstat -ano ^| findstr "\<%%i\>"') do (
- taskkill.exe /f /pid %%p
- )
- )
复制代码
作者: 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
试试这个- @echo off
- setlocal enabledelayedexpansion
- FOR %%i IN (5100 5200 5300) do(
- set r=%%i
- call :kill !r!
- )
- pause
- goto :eof
- :kill
- for /f "tokens=5" %%p in ('netstat -ano ^| findstr %1) do (
- taskkill.exe /f /pid %%p
- )
复制代码
1# Sgr
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |