标题: 【已解决】有偿求一个按不同IP(和IP段)运行不同命令的批处理或者小工具 [打印本页]
作者: gm8800 时间: 2012-3-12 00:27 标题: 【已解决】有偿求一个按不同IP(和IP段)运行不同命令的批处理或者小工具
具体报酬:20个QQ币
支付方式:直接充值
联系方式:QQ:admin@muyuehu.com(需要验证的话请填写:批处理之家)
有效期限:2012年03月20日之前。
需求描述:
(1)系统环境(XP/Win2003/Vista/Win7,中文版/英文版,专业版/家庭版/精简版,等)
(2)想要实现的功能的具体描述
能按照机器自身IP来运行不同的命令,比如:
192.168.1.2~26 运行1.exe
192.168.1.27~86 运行2.exe
192.168.1.87~186 运行3.exe
192.168.2.2~86 运行4.exe
192.168.2.87~196 运行6.exe
.....
192.168.3.1~96 运行1.exe
(3)测试数据及期待结果
不能有运行不了或者重复运行的,比如192.168.1.2~26 已经成功运行了1.exe,有再次运行1.exe或者2.exe
(4)其它补充信息
需要经过我实际使用完美达到目的,详细教我怎么用,比如IP段改了,怎么灵活修改批处理
我这有个小工具,但是不完善,不知道为什么,有些IP出错
作者: dnfreeuser 时间: 2012-3-12 07:59
和你发的那样做个小工具好象很容易
作者: find 时间: 2012-3-12 09:31
不能有运行不了或者重复运行的,比如192.168.1.2~26 已经成功运行了1.exe,有再次运行1.exe或者2.exe
程序1.exe的进程名是不是就叫做1.exe啊?
作者: gm8800 时间: 2012-3-12 16:06
本帖最后由 gm8800 于 2012-3-12 16:07 编辑
程序1.exe的进程名是不是就叫做1.exe啊?
find 发表于 2012-3-12 09:31
只是个名字,并不是指真的就是1.exe也可能是1.vbs或者1.txt....所以进程名就不一定了
作者: find 时间: 2012-3-12 18:58
回复 4# gm8800
进程名不一定的话,你希望通过什么方式来判断程序有没有被重复运行?
作者: gm8800 时间: 2012-3-13 10:28
回复 5# find
不需要判断有没有运行,只需要让他只成功运行一次就可以了呀
作者: dnfreeuser 时间: 2012-3-13 12:32
程序运行后会自动执行ip对应的程序并退出,如有错误会提示。
不是批处理,看着用吧。。
[说明]
config=指定开始ip所要执行的文件,如10.0.3.1=notepad.exe,为10.0.3.1开始执行notepad.exe,结束ip见count段
count=指定ip范围,如10.0.3.1=15,为10.0.3.1~10.0.3.15
[config]
10.0.3.1=calc.exe
[count]
10.0.3.1=15
[main]
run=0
像这样的话
192.168.1.2~26 运行1.exe
192.168.1.27~86 运行2.exe
192.168.1.87~186 运行3.exe
192.168.2.2~86 运行4.exe
192.168.2.87~196 运行6.exe
[config]
192.168.1.2=1.exe
192.168.1.27=2.exe
192.168.1.87=3.exe
192.168.2.2=4.exe
192.168.2.87=6.exe
[count]
192.168.1.2=25
192.168.1.27=60
192.168.1.87=100
192.168.2.2=85
192.168.2.87=110
作者: ivor 时间: 2012-3-13 17:18
- @echo off & setlocal enabledelayedexpansion
- for /f %%a in ('netsh int ip sh ipadd ^| findstr "本地连接"') do (
- set ip=%%~xa&set ip=!ip:.=!
- if "%%~na" equ "192.168.1" (if !ip! GEQ 2 (if !ip! LEQ 26 (1.exe) else (if !ip! GEQ 27 (if !ip! LEQ 86 (2.exe) else (if !ip! GEQ 87 if !ip! LEQ 186 (3.exe))))))
- if "%%~na" equ "192.168.2" (if !ip! GEQ 2 (if !ip! LEQ 86 (4.exe) else (if !ip! GEQ 87 (if !ip! LEQ 196 (6.exe)))))
- if "%%~na" equ "192.168.3" (if !ip! GEQ 1 (if !ip! LEQ 96 (1.exe)))
- )
复制代码
半成品,后面的可以引用此代码,没有版权
作者: find 时间: 2012-3-13 18:17
回复 6# gm8800
不能有运行不了或者重复运行的,比如192.168.1.2~26 已经成功运行了1.exe,有再次运行1.exe或者2.exe
这不是你自己说的吗?
作者: gm8800 时间: 2012-3-13 23:05
回复 7# dnfreeuser
你这个我测试了下,发现和我发的那个有个差不多的问题,看我这的设置是这样的,但是192.168.1.192这个IP会同时打开3.txt和6.txt,192.168.2.104这个IP会同时打开1.txt和7.txt;这是什么问题?- [说明]
- config=指定开始ip所要执行的文件,如10.0.3.1=notepad.exe,为10.0.3.1开始执行notepad.exe,结束ip见count段
- count=指定ip范围,如10.0.3.1=15,为10.0.3.1=10.0.3.15
- [config]
- 192.168.2.65=1.txt
- 192.168.1.2=2.txt
- 192.168.1.96=3.txt
- 192.168.1.26=4.txt
- 192.168.2.1=5.txt
- 192.168.1.160=6.txt
- 192.168.2.101=7.txt
- 192.168.2.125=8.txt
- 192.168.2.186=9.txt
- 192.168.0.1=0.txt
- [count]
- 192.168.2.65=96
- 192.168.1.2=25
- 192.168.1.96=159
- 192.168.1.26=95
- 192.168.2.1=64
- 192.168.1.160=199
- 192.168.2.101=124
- 192.168.2.125=245
- 192.168.2.186=241
- 192.168.0.1=254
- [main]
- run=0
复制代码
作者: ccstr 时间: 2012-3-14 02:42
192.168.1.192
192.168.2.104
你这两台机都是双 IP 吧?
作者: dnfreeuser 时间: 2012-3-14 08:17
本帖最后由 dnfreeuser 于 2012-3-14 08:19 编辑
IP段范围重复了
比如
192.168.2.104
会符合
192.168.2.65=1.txt
和
192.168.2.101=7.txt
WHY?
因为在count里
192.168.2.65=96 所以ip范围是192.168.2.65~192.168.2.65+96(96个)-1(去除本身)=160,即192.168.2.65~192.168.2.160 共96个IP地址,包含192.168.2.101,所以执行7.txt
然后
192.168.2.101=124 包含192.168.2.101~192.168.2.224同样包含192.168.2.104,所以执行1.txt
正确的范围应该是
192.168.2.65~192.168.2.96的话是192.168.2.65=32
192.168.2.101~124的话192.168.2.101=4
另外,如果
[config]
192.168.1.4=1.txt
[count]
192.168.1.1=10
那么这样是不能执行1.txt的,上下必须要对应。即下面必须是192.168.1.4=这样的
作者: dnfreeuser 时间: 2012-3-17 08:05
回复 10# gm8800
人呢?都没个回音说行不行了?
作者: gm8800 时间: 2012-3-17 20:52
回复 13# dnfreeuser
实在不好意思,我这几天太忙了,一直没来论坛,那天按照你的试了下,可以用,谢谢你了,请PM告诉我你的QQ,另外就是,这个小工具启动的时候有个黑色的框,不知道能不能不显示这个框
作者: find 时间: 2012-3-17 21:28
回复 14# gm8800
http://www.bathome.net/thread-3271-1-1.html
作者: gm8800 时间: 2012-3-18 23:57
回复 15# find
嗯,谢谢,我用这个VBS可以消除那个黑框- wscript.createobject("wscript.shell").run "D:\tools\ip.exe",0
复制代码
还有要谢谢ivor,虽然的他批处理我怎么试都不管用,可能是我太笨了吧
作者: netbenton 时间: 2012-3-19 23:10
虽然已经解决了,还是补上一个用批处理实现的吧- @echo off&setlocal ENABLEDELAYEDEXPANSION
- for /f "tokens=1* delims=:" %%a in ('ipconfig ^|findstr /c:"IP Add"') do set ip=%%b
- echo 你的IP是: %ip%
- for /f "tokens=1-4 delims=. " %%1 in ("%ip%") do (
- set v1=00%%1
- set v2=00%%2
- set v3=00%%3
- set v4=00%%4
- set ipx=!v1:~-3!.!v2:~-3!.!v3:~-3!.!v4:~-3!
- )
-
- echo 补0后是: %ipx%
- for /f "usebackq tokens=1-3 delims==~~" %%a in ("%~0") do (
- if defined find (
- set /a n+=1
- set ve=00%%b
- for /f "tokens=1-4 delims=." %%1 in ("%%a") do (
- set v1=00%%1
- set v2=00%%2
- set v3=00%%3
- set v4=00%%4
- set op!n!=!v1:~-3!.!v2:~-3!.!v3:~-3!.!v4:~-3! !v1:~-3!.!v2:~-3!.!v3:~-3!.!ve:~-3! %%c
- )
- rem 给每个IP区域弃置都补0
-
- ) else (
- if "%%a" equ "[config]" set find=y
- )
- )
-
-
- for /l %%k in (1,1,%n%) do (
- for /f "tokens=1-3" %%a in ("!op%%k!") do (
- if "!ipx!" geq "%%a" if "!ipx!" leq "%%b" set run=%%c&goto :run
- )
- )
- rem 然后逐个比较,有匹配的区域则中断比较,跳到运行段
- pause
-
-
- goto :eof
-
- :run
- echo;RUN %run%
- pause
- goto :eof
-
-
- 配置区
- [config]
- 192.168.1.2~26=1.exe
- 192.168.1.27~86=2.exe
- 192.168.1.87~186=3.exe
- 192.168.2.2~86=4.exe
- 192.168.2.87~196=6.exe
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |