标题: [网络连接] 批处理怎样同时判断多个条件? [打印本页]
作者: batbat123 时间: 2012-5-31 14:04 标题: 批处理怎样同时判断多个条件?
目前我想实现的是 通过netstat -ano查询后 去同时判断多个端口,8001和8002 2个端口存在goto跳转执行命令 或者只有1个存在goto执行命令 1个端口都不存在goto跳转执行命令- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('netstat -ano ^| find /i "8001"') do (
-
- 判断有8001
- exit
- goto out
-
- )
-
- :out
- 判断没有8001
- exit
复制代码
以上命令是通过netstat -ano查询 判断系统有没打开8001这个端口 有退出 如果没有8001就跳转到:out
目前我想实现的是 通过netstat -ano查询后 去同时判断多个端口,8001和8002 2个端口存在goto跳转执行命令 或者只有1个存在goto执行命令 1个端口都不存在goto跳转执行命令
麻烦大家告诉我下~~~~~在此感谢
同时在请教 跳转的几个位置 怎么合理编辑 判断的后跳转 再判断,甚至再判断,这样这么多跳转在一个批处中 会出错吗 麻烦大哥大姐们 多给几个例子出来吗
作者: neorobin 时间: 2012-5-31 14:23
本帖最后由 neorobin 于 2012-6-2 11:08 编辑
原发代码未测试, 不可用, 已删, 经测试代码见 11楼
作者: batbat123 时间: 2012-5-31 14:39
那没有找到端口 在哪里执行命令
1个端口都不存在goto跳转执行命令
这在哪里执行
作者: neorobin 时间: 2012-5-31 15:17
本帖最后由 neorobin 于 2012-6-2 11:09 编辑
原发代码未测试, 不可用, 已删, 经测试代码见 11楼
作者: batbat123 时间: 2012-5-31 18:31
@echo off
for %%a in (8001 8002) do (
netstat -an|findstr ":%%a " && set "found%%a=1"
)
set /a "foundAll=found8001 & found8002"
set found || (goto ut)
if "%found8001%"=="1" (goto :ouq)
if "%found8002%"=="1" (goto :ouz)
if "%foundAll%"=="1" (goto :oua)
:out
wwwwwwwwwwwwwwwww
pause>nul
exit
:ouq
8001
pause>nul
exit
:ouz
8002
pause>nul
exit
:oua
都有
pause>nul
exit
我是这个目的,,,,,但是这样执行不了
作者: neorobin 时间: 2012-5-31 19:34
回复 5# batbat123 - if not defined found8001 (没找到 8001)
复制代码
作者: batbat123 时间: 2012-5-31 20:32
还是完全没明白
目的netstat -an 判断 8001和8002端口
不存在 goto ouq
8001存在 goto oua
8002存在 goto ouz
8001和8002都存在 goto ouw
作者: neorobin 时间: 2012-5-31 20:35
本帖最后由 neorobin 于 2012-6-2 11:09 编辑
原发代码未测试, 不可用, 已删, 经测试代码见 11楼
作者: neorobin 时间: 2012-5-31 20:40
本帖最后由 neorobin 于 2012-5-31 20:42 编辑
cmd 里没有象高级语言中的 case, switch 之类的流控制结构, 而且 if 也不支持复杂的逻辑表达式.
复杂一点的逻辑控制, 可选的方式有 if 配合 set /a 或者 变量组合
作者: batbat123 时间: 2012-6-2 09:39
回复 4# neorobin
如果只找到只8002端口,,,===echo,没找到任何端口 的操作
如果找到所有端口 ==== echo,找到端口: 8001 的操作
如果找到端口只8001 === (echo,找到端口: 8001) + (echo,找到所有端口) 2个一起操作
不合理啊~~~~~~我晕死
作者: neorobin 时间: 2012-6-2 10:09
本帖最后由 neorobin 于 2012-6-2 11:00 编辑
- @echo off & setlocal enabledelayedexpansion
- set "Ports=8001 8002"
- for %%a in (%Ports% Any) do set "found%%a=0"
- set "foundAll=1"
- for /f "tokens=3,5 delims=: " %%a in ('netstat -an') do (
- set /a "found%%a=1,found%%b=1"
- )
-
- for %%a in (%Ports%) do set /a "foundAll&=found%%a, foundAny|=found%%a"
- if "!foundAll!"=="1" (echo,找到全部端口) else (
- for %%a in (%Ports%) do if "!found%%a!"=="1" (echo,找到端口 %%a) else (echo,未找到端口 %%a)
- if "!foundAny!"=="0" (echo,未找到任何端口)
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |