中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请帮忙优化一下这个自动更新游戏的批处理
作者:
标题: 请帮忙优化一下这个自动更新游戏的批处理 上一主题 | 下一主题
zhwvip
初级用户





积分 29
发帖 14
注册 2006-8-2
状态 离线
『楼 主』:  请帮忙优化一下这个自动更新游戏的批处理

我这里网吧应用还原卡, 所以游戏需要1太1台的更新 , 我现在用开机批处理更新 ,更新文件在电影的服务器上 .我每次更新时开4到5台 看他更新完 ,关机保存本来没什么不好。。。 后来我越来越懒 又更改批处理 一下把所有的机器都开开 开始更新4台 后来完成一台 另一台自动开始 。可是所有的都更新完也很费工夫 ,又把音乐做成另一个服务器让它自动分配到电影和音乐 ,一边分一个 , 可是又有问题 电影和音乐 的配置不一样, 造成更新速度不一样总之, 代码有问题... 而且是好几个批处理完成 我没法给他综合到一起.. 最后只能让大家帮我参谋下了 . 客户机 开机启动 updata3.bat [updata3.bat] @call \\dianying2\游戏\更新纪录\updata3.bat [updata3.bat] @echo off if exist ipconfig.txt del ipconfig.txt ipconfig /all >ipconfig.txt if exist phyaddr.txt del phyaddr.txt find "Physical Address" ipconfig.txt >phyaddr.txt if exist ipaddr.txt del ipaddr.txt find "IP Address" ipconfig.txt >ipaddr.txt for /f "skip=2 tokens=12" %%M in (phyaddr.txt) do set strMac=%%M @echo %strMac% for /f "skip=2 tokens=15" %%I in (ipaddr.txt) do set IPAddress=%%I @echo %IPAddress% arp -d >nul arp -s %IPAddress% %strMac% >nul ARP -s xxx.xxx.xxx.1 00-3C-01-xx-xx-xx >nul ::绑ip start/W C:\WINDOWS\system32\worfiv.cpl ::狼牙借口 call \\dianying2\游戏\更新纪录\123\判断.bat exit [判断.bat] for /f "" %%N IN (\\dianying2\useru$\123456\Config.ini) Do if %ComputerName%==%%N ( call \\dianying2\游戏\更新纪录\123\分配.bat ) Else ( echo 123 ) ::主要为了看这台机器用不用更新 [分配.bat] for /f "tokens=*" %%i in (a.txt) do (set /a "str=%%i") set /A a=%str%+1 set /A b=%str% %%2 echo %a% > a.txt echo %b% @if "%b%"=="1" goto mbmbpd @if "%b%"=="0" goto dianying2pd :mbmbpd call \\mbmb\游戏\更新纪录\123\判断连接.bat exit :dianying2pd call \\dianying2\游戏\更新纪录\123\判断连接.bat exit ::为了分配到dianying2 或者mbmb [连接判断.bat] (2个连接判断是一样的,就是位置不同) @echo off set /A x=0 :oo for /f "tokens=*" %%i in (\\dianying2\useru$\123456\1.ini) do (set /a "str=%%i") for /f "tokens=*" %%i in (\\dianying2\useru$\123456\2.ini) do (set /a "str1=%%i") set /A x=x+1 set /A a=%str% set /A b=%str1% set /A c=a-b if %c% GEQ 3 goto pau if %c% LEQ 3 goto go :pau cls echo. echo ================================= echo 第 %x% 次等待 连接数目到达最大 echo 8秒钟后尝试再次连接 echo dianying2队列 请稍后... echo ================================= @echo %ComputerName% 第 %x% 次等待 连接数目到达最大>> \\dianying2\useru$\123456\报告\等待报告.txt @echo dianying2纪录 %time% , %date% >> \\dianying2\useru$\123456\报告\等待报告.txt @echo. >> \\dianying2\useru$\123456\报告\等待报告.txt ping -n 13 localhost > nul goto oo :go for /f "tokens=*" %%i in (\\dianying2\useru$\123456\1.ini) do (set /a "str2=%%i") set /A a=%str%+1 echo %a% > \\dianying2\useru$\123456\1.ini call \\dianying2\游戏\更新纪录\123\更新.bat exit [更新.bat] @xcopy /s /z /d /y/e/h \\dianying2\游戏\网络游戏\传奇世界 D:\网络游戏\传奇世界 >nul ... rd /s/q d:\网络游戏\浩方对战平台 start /w \\dianying2\游戏\浩方\浩方对战平台.exe for /f "tokens=*" %%i in (\\dianying2\useru$\123456\2.ini) do (set /a "str2=%%i") set /A a=%str2%+1 echo %a% > \\dianying2\useru$\123456\2.ini exit 主要在 [判断.bat][分配.bat][连接判断.bat] [更新.bat] 着几个批处理 可不可以简化下... 我实在是没办法了.现在还有个问题 因为dianying2 和mbmb的配置不同,造成排队的机器一多就一个队列先完成另 一个还要半天 我想了想,不应该先分配队列.应该先排队进队列.在分配更新服务器... 应该是这样把 ?   恳请大家帮忙看看... 呼 手疼 ps:执行过程:在updata3棒定mac 连接判断 判断.bat 确定本机是否更新 是 连接分配 分配.bat 根据a.txt里的总数分配到diangying2或者mbmb 连接dianying2或mbmb里的连接判断 同时a.txt 加1 连接判断.bat 读取1.ini和2.ini 数字象减得出现在更新机器 数 大于4排队. 小于连接更新(2台服务器一样的 连接判断和更新) 更新.bat 进入时1.ini加1 各种更新(用xcopy .rar无应答覆盖自解压,不用管这里) 退出2.ini加1 简化或综合到1个批里从4楼的he200377 兄给的思路中已经有启发了 简化方案 6楼zerocq兄 给出判断的简话方案可以综合到updata3里 同时在8楼的代码抛弃了一堆ini ~~~ 谢谢了 现在想实现的过成是 updata3:棒定mac 等前期准备 同时判断是否更新(实现),连 接 排队分配.bat 排队分配.bat : 看前方是否有8台机器在更新 ,有的话排队等 戴 ,没有 进入更新队列 , 判断dianying2更新的机器 多还是mbmb多,挑更新机器少的服务器开始更新. (排队好半可以自己实现 但是怎么在队列里自动分配 到某台服务器 ?) 更新.bat:各种更新 再次感谢您能看完我写的这些 (能看完我罗里罗嗦写完这些就很谢谢您了) [ Last edited by zhwvip on 2006-10-29 at 06:53 AM ]


2006-10-28 04:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhwvip
初级用户





积分 29
发帖 14
注册 2006-8-2
状态 离线
『第 2 楼』:  

虽然 没人理我 还是要把它顶起来 ...


2006-10-28 21:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 3 楼』:  

随便写的 ::本地网络主机游戏更新目录 set update_server_path=\\192.168.0.200\游戏更新 ::本机游戏更新目录 set update_local_path=d:\游戏更新 @echo off cls setlocal enabledelayedexpansion title 本地网络游戏更新,更新没有的,时间小的,时间大且大小不一样的 set sp=%update_server_path% set lp=%update_local_path% ::创建目录结构,包括子目录,除过空目录 xcopy /T /s %sp% %lp%||(echo 错误&pause>nul&ping -n 2 127.1>nul&goto :eof) if exist update_.txt del /q update_.txt ::生成本地网络主机游戏更新目录下所有文件附时间大小 for /f "tokens=*" %%a in ('dir /a-d/s/b %sp%') do ( set var=%%a >>update_.txt echo !var:%sp%\=!#%%~ta#%%~za ) for /f "tokens=1-3 delims=#" %%b in (update_.txt) do ( if not exist "%%b" copy "%sp%\%%b" "%%b" else call :fc_files "%%b" "%%c" "%%d" ) goto :eof :fc_files for %%? in ("%lp%\%1") do ( if %%~t? lss %2 copy "%sp%\%1" "%1" else (if not %%z?==%3 copy "%sp%\%1" "%1") ) goto :eof


2006-10-29 00:32
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
zhwvip
初级用户





积分 29
发帖 14
注册 2006-8-2
状态 离线
『第 4 楼』:  

谢谢 he200377 兄弟 不过我现在想的主要是怎么实现先排队在分派到更新的服务器上 ... 好象你这里 for /f "tokens=1-3 delims=#" %%b in (update_.txt) do ( if not exist "%%b" copy "%sp%\%%b" "%%b" else call :fc_files "%%b" "%%c" "%%d" ) goto :eof :fc_files for %%? in ("%lp%\%1") do ( if %%~t? lss %2 copy "%sp%\%1" "%1" else (if not %%z?==%3 copy "%sp%\%1" "%1") ) 少2个括号把? .. 而且着段实现要费好长时间 ... 没什么大用出啊? 不过还是多谢了 看到着段发现在1个批里也能call 下一段代码 好象GOTO.. 不过我就是在[判断.bat] 这里GOTO 不下去才连接[分配.bat] . 现在看来可以把分配整和起来 加个 :分配 直接CALL它就好了 ...... 对吧?


2006-10-29 01:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zerocq
中级用户




积分 458
发帖 196
注册 2006-10-5
状态 离线
『第 5 楼』:  

[判断.bat] find "%ComputerName%" \\dianying2\useru$\123456\Config.ini>nul||call \\dianying2\游戏\更新纪录\123\分配.bat 应该可以...... 这么多ini,txt文件都什么用的,看不懂下边代码了 等高手来:D [ Last edited by zerocq on 2006-10-29 at 02:56 AM ]


2006-10-29 02:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhwvip
初级用户





积分 29
发帖 14
注册 2006-8-2
状态 离线
『第 6 楼』:  

Originally posted by zerocq at 2006-10-29 02:52: [判断.bat] find "%ComputerName%" \\dianying2\useru$\123456\Config.ini>nul||call \\dianying2\游戏\更新纪录\123\分配.bat 应该可以...... 这么多ini,txt文件都什习...
怪我没说清楚 抱歉... 其实1.ini 2.ini 主要作用是 每当一台客户机开始更新 1.ini里的数+1 ,更新完退出时 2.ini里数字+1 它们相-就是在更新的机器数 ,用这个来判断是否直接开始更新 或者排队... 麻烦把... 2抬更新用服务器上有4个这样的 ini 还有个总数的a.txt 用来看单双来分派排在哪个服务器队列里 . 555 帮帮我把..我要死了 过两天我肯定不知道都是什么了 . 看来还是要写备注的 看明白find "%ComputerName%" \\dianying2\useru$\123456\Config.ini>nul||call \\dianying2\游戏\更新纪录\123\分配.bat 这个了 ,谢谢 用FIND判断本机名在不在config里 有的话执行分配 .简单就是好 [ Last edited by zhwvip on 2006-10-29 at 03:46 AM ]


2006-10-29 03:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zerocq
中级用户




积分 458
发帖 196
注册 2006-10-5
状态 离线
『第 7 楼』:  

把你的代码修改整合了一下弄出下边的代码 两台服务器文件路径要完全相同才可以......
for /f "skip=1 tokens=1-2 delims=:" %%a in ('ipconfig /all^|find "IP Address"') do @set IPAddress=%%b for /f "skip=1 tokens=1-2 delims=:" %%a in ('ipconfig /all^|find "Physical"') do @set strMac=%%b arp -d >nul arp -s %IPAddress% %strMac% >nul ARP -s xxx.xxx.xxx.1 00-3C-01-xx-xx-xx >nul start/W C:\WINDOWS\system32\worfiv.cpl find "%ComputerName%" \\dianying2\useru$\123456\Config.ini>nul||goto :分配 exit :分配 for /f "tokens=*" %%i in (\\dianying2\游戏\更新纪录\123\a.txt) do (set /a "str=%%i") set /A a=%str%+1 set /A b=%str% %%2 echo %a% > a.txt echo %b% @if "%b%"=="1" set updatepath=\\mbmb @if "%b%"=="0" set updatepath=\\dianying2 :检测 for /f "tokens=1-2" %%a in ('dir %updatepath%\useru$\123456\*.txt^|find "文件"') do @echo 有%%a台主机正在更新 if %%a LEQ 3 goto :更新 set /A x=x+1 cls echo ================================= echo 第 %x% 次等待 连接数目到达最大 echo 8秒钟后尝试再次连接 echo dianying2队列 请稍后... echo ================================= @echo %ComputerName% 第 %x% 次等待 连接数目到达最大>> %updatepath%\useru$\123456\报告\等待报告.txt @echo %updatepath%纪录 %time% , %date% >> %updatepath%\useru$\123456\报告\等待报告.txt @echo. >> %updatepath%\useru$\123456\报告\等待报告.txt ping -n 13 localhost > nul goto :检测 :更新 echo .>%updatepath%\useru$\123456\%computername%.txt @xcopy /s /z /d /y/e/h %updatepath%\游戏\网络游戏\传奇世界 D:\网络游戏\传奇世界 >nul ... rd /s/q d:\网络游戏\浩方对战平台 start /w %updatepath%\游戏\浩方\浩方对战平台.exe del %updatepath%\useru$\123456\%computername%.txt exit
绑定IP->分配->检测txt文件个数(如果<3进行更新)->更新(先写一个%computername%.txt,更新完再删掉,方便查看哪几个主机在更新) 希望对你有用咯:) [ Last edited by zerocq on 2006-10-29 at 05:18 AM ]


2006-10-29 05:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhwvip
初级用户





积分 29
发帖 14
注册 2006-8-2
状态 离线
『第 8 楼』:  

粗略看完 . 很感谢. 简化综合 作完了 今天没时间了 明天将实际测试下~ 再次感谢 ps:同时希望在帮忙看看另一种先排队在分配的方案 ~~~ [ Last edited by zhwvip on 2006-10-29 at 06:55 AM ]


2006-10-29 05:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zerocq
中级用户




积分 458
发帖 196
注册 2006-10-5
状态 离线
『第 9 楼』:  

Originally posted by zhwvip at 2006-10-29 05:39: 粗略看完 . 很感谢. 简化综合 作完了 今天没时间了 明天将实际测试下~ 再次感谢 ps:同时希望在帮忙看看另一种先排队在分配的方案 ~~~ [ Last edite ...
排队按顺序更新好像很麻烦:( 应该要有个地方记录顺序,好复杂,搞不出来:) 退一步简单一点,用for检测两台服务器上正在更新的主机数量 比较数量进行分配到哪台服务器这样好实现点:)


2006-10-30 06:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: