找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 34883|回复: 13

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

[复制链接]
发表于 2014-3-27 21:15:06 | 显示全部楼层 |阅读模式
通过查找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. )
复制代码
发表于 2014-3-27 21:24:52 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=5" %%p in ('netstat -ano ^| findstr "\<5100\> \<5200\> \<5300\>"') do (
  3.     taskkill.exe /f /pid %%p
  4. )
复制代码
 楼主| 发表于 2014-3-27 21:29:04 | 显示全部楼层
DAIC能帮忙解释一下吗..有点儿不懂..对BAT不太熟悉..非常感谢..
 楼主| 发表于 2014-3-27 21:32:37 | 显示全部楼层
我是想知道如何我把它们放在数组里,如果嵌套循环..因为你这样的写法,如果我有五个端口乞不是要写很长..
 楼主| 发表于 2014-3-27 21:35:15 | 显示全部楼层
findstr "\<5100\> \<5200\> \<5300\>",这里为什么这么写..
发表于 2014-3-27 21:36:00 | 显示全部楼层
回复 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. )
复制代码
 楼主| 发表于 2014-3-27 21:39:54 | 显示全部楼层
DAIC,我只有两个疑问,麻烦你帮我解答一下,我确实不明白.. ^| 这个地方为什么要转义,|本身就表示管道,还转义干什么. \<\>这里这么用又是为什么.. 不胜感激..
 楼主| 发表于 2014-3-27 21:41:11 | 显示全部楼层
敬等你回复..谢谢..
 楼主| 发表于 2014-3-27 21:43:19 | 显示全部楼层
DAIC帮忙解释一下呗,不然晚上觉都睡不好..非常感谢..
 楼主| 发表于 2014-3-27 22:06:11 | 显示全部楼层
刚才查了一下大至明白了..可是就是有一点不明白 | 管道前面加个转义干什么..明明findstr就要从管道里提取数据.
 楼主| 发表于 2014-3-27 22:06:28 | 显示全部楼层
刚才查了一下大至明白了..可是就是有一点不明白 | 管道前面加个转义干什么..明明findstr就要从管道里提取数据.
发表于 2014-3-27 22:17:20 | 显示全部楼层
发表于 2014-3-27 22:18:20 | 显示全部楼层
\<\>这里这么用又是为什么

findstr命令的帮助里面有,你自己看看
findstr /?
发表于 2014-4-2 23:58:13 | 显示全部楼层
试试这个

  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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 03:06 , Processed in 0.034373 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表