Board logo

标题: 【已解决】有偿求一个按不同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

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f %%a in ('netsh int ip sh ipadd ^| findstr "本地连接"') do (
  3. set ip=%%~xa&set ip=!ip:.=!
  4. 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))))))
  5. 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)))))
  6. if "%%~na" equ "192.168.3" (if !ip! GEQ 1 (if !ip! LEQ 96 (1.exe)))
  7. )
复制代码
半成品,后面的可以引用此代码,没有版权
作者: 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;这是什么问题?
  1. [说明]
  2. config=指定开始ip所要执行的文件,如10.0.3.1=notepad.exe,为10.0.3.1开始执行notepad.exe,结束ip见count段
  3. count=指定ip范围,如10.0.3.1=15,为10.0.3.1=10.0.3.15
  4. [config]
  5. 192.168.2.65=1.txt
  6. 192.168.1.2=2.txt
  7. 192.168.1.96=3.txt
  8. 192.168.1.26=4.txt
  9. 192.168.2.1=5.txt
  10. 192.168.1.160=6.txt
  11. 192.168.2.101=7.txt
  12. 192.168.2.125=8.txt
  13. 192.168.2.186=9.txt
  14. 192.168.0.1=0.txt
  15. [count]
  16. 192.168.2.65=96
  17. 192.168.1.2=25
  18. 192.168.1.96=159
  19. 192.168.1.26=95
  20. 192.168.2.1=64
  21. 192.168.1.160=199
  22. 192.168.2.101=124
  23. 192.168.2.125=245
  24. 192.168.2.186=241
  25. 192.168.0.1=254
  26. [main]
  27. 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可以消除那个黑框
  1. wscript.createobject("wscript.shell").run "D:\tools\ip.exe",0
复制代码
还有要谢谢ivor,虽然的他批处理我怎么试都不管用,可能是我太笨了吧
作者: netbenton    时间: 2012-3-19 23:10

虽然已经解决了,还是补上一个用批处理实现的吧
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. for /f "tokens=1* delims=:" %%a in ('ipconfig ^|findstr /c:"IP Add"') do set ip=%%b
  3. echo 你的IP是: %ip%
  4. for /f "tokens=1-4 delims=. " %%1 in ("%ip%") do (
  5. set v1=00%%1
  6. set v2=00%%2
  7. set v3=00%%3
  8. set v4=00%%4
  9. set ipx=!v1:~-3!.!v2:~-3!.!v3:~-3!.!v4:~-3!
  10. )
  11. echo 补0后是: %ipx%
  12. for /f "usebackq tokens=1-3 delims==~~" %%a in ("%~0") do (
  13.   if defined find (
  14. set /a n+=1
  15. set ve=00%%b
  16. for /f "tokens=1-4 delims=." %%1 in ("%%a") do (
  17. set v1=00%%1
  18. set v2=00%%2
  19. set v3=00%%3
  20. set v4=00%%4
  21. set op!n!=!v1:~-3!.!v2:~-3!.!v3:~-3!.!v4:~-3! !v1:~-3!.!v2:~-3!.!v3:~-3!.!ve:~-3! %%c
  22. )
  23. rem 给每个IP区域弃置都补0
  24.   ) else (
  25. if "%%a" equ "[config]" set find=y
  26.   )
  27. )
  28. for /l %%k in (1,1,%n%) do (
  29.     for /f "tokens=1-3" %%a in ("!op%%k!") do (
  30. if "!ipx!" geq "%%a" if "!ipx!" leq "%%b" set run=%%c&goto :run
  31.     )
  32. )
  33. rem 然后逐个比较,有匹配的区域则中断比较,跳到运行段
  34. pause
  35. goto :eof
  36. :run
  37. echo;RUN %run%
  38. pause
  39. goto :eof
  40. 配置区
  41. [config]
  42. 192.168.1.2~26=1.exe
  43. 192.168.1.27~86=2.exe
  44. 192.168.1.87~186=3.exe
  45. 192.168.2.2~86=4.exe
  46. 192.168.2.87~196=6.exe
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2