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

[系统相关] 批处理命令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. )
复制代码

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

TOP

DAIC能帮忙解释一下吗..有点儿不懂..对BAT不太熟悉..非常感谢..

TOP

我是想知道如何我把它们放在数组里,如果嵌套循环..因为你这样的写法,如果我有五个端口乞不是要写很长..

TOP

findstr "\<5100\> \<5200\> \<5300\>",这里为什么这么写..

TOP

回复 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. )
复制代码

TOP

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

TOP

敬等你回复..谢谢..

TOP

DAIC帮忙解释一下呗,不然晚上觉都睡不好..非常感谢..

TOP

刚才查了一下大至明白了..可是就是有一点不明白 | 管道前面加个转义干什么..明明findstr就要从管道里提取数据.

TOP

刚才查了一下大至明白了..可是就是有一点不明白 | 管道前面加个转义干什么..明明findstr就要从管道里提取数据.

TOP

TOP

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

findstr命令的帮助里面有,你自己看看
findstr /?

TOP

试试这个
  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

TOP

返回列表