![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-02 07:57 |
共 48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,250 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 请帮忙优化一下这个自动更新游戏的批处理 |
| 可打印版本 1,382 / 8 |
| 第1楼 zhwvip | 发表于 2006-10-28 04:43 |
| 初级用户 发帖 14 积分 29 | |
|
请帮忙优化一下这个自动更新游戏的批处理 我这里网吧应用还原卡, 所以游戏需要1太1台的更新 , 我现在用开机批处理更新 ,更新文件在电影的服务器上 .我每次更新时开4到5台 看他更新完 ,关机保存本来没什么不好。。。 后来我越来越懒 又更改批处理 一下把所有的机器都开开 开始更新4台 后来完成一台 另一台自动开始 。可是所有的都更新完也很费工夫 ,又把音乐做成另一个服务器让它自动分配到电影和音乐 ,一边分一个 , 可是又有问题 电影和音乐 的配置不一样, 造成更新速度不一样总之, 代码有问题... 而且是好几个批处理完成 我没法给他综合到一起.. 最后只能让大家帮我参谋下了 .
客户机 开机启动 updata3.bat @call \\dianying2\游戏\更新纪录\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 for /f "" %%N IN (\\dianying2\useru$\123456\Config.ini) Do if %ComputerName%==%%N ( call \\dianying2\游戏\更新纪录\123\分配.bat ) Else ( echo 123 ) ::主要为了看这台机器用不用更新 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 (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 @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 主要在 着几个批处理 可不可以简化下... 我实在是没办法了.现在还有个问题 因为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 ] |
|
| 第2楼 zhwvip | 发表于 2006-10-28 21:47 |
| 初级用户 发帖 14 积分 29 | |
|
虽然 没人理我 还是要把它顶起来 ...
|
|
| 第3楼 vkill | 发表于 2006-10-29 00:32 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
随便写的
::本地网络主机游戏更新目录 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 |
|
| 第4楼 zhwvip | 发表于 2006-10-29 01:02 |
| 初级用户 发帖 14 积分 29 | |
|
谢谢 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它就好了 ...... 对吧? |
|
| 第5楼 zerocq | 发表于 2006-10-29 02:52 |
| 中级用户 发帖 196 积分 458 | |
|
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 ] |
|
| 第6楼 zhwvip | 发表于 2006-10-29 03:42 |
| 初级用户 发帖 14 积分 29 | |
Originally posted by zerocq at 2006-10-29 02:52: 怪我没说清楚 抱歉... 其实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 ] |
|
| 第7楼 zerocq | 发表于 2006-10-29 05:13 |
| 中级用户 发帖 196 积分 458 | |
|
把你的代码修改整合了一下弄出下边的代码
两台服务器文件路径要完全相同才可以......
绑定IP->分配->检测txt文件个数(如果<3进行更新)->更新(先写一个%computername%.txt,更新完再删掉,方便查看哪几个主机在更新) 希望对你有用咯:) [ Last edited by zerocq on 2006-10-29 at 05:18 AM ] |
|
| 第8楼 zhwvip | 发表于 2006-10-29 05:39 |
| 初级用户 发帖 14 积分 29 | |
|
粗略看完 . 很感谢. 简化综合 作完了 今天没时间了 明天将实际测试下~
再次感谢 ps:同时希望在帮忙看看另一种先排队在分配的方案 ~~~ [ Last edited by zhwvip on 2006-10-29 at 06:55 AM ] |
|
| 第9楼 zerocq | 发表于 2006-10-30 06:15 |
| 中级用户 发帖 196 积分 458 | |
Originally posted by zhwvip at 2006-10-29 05:39: 排队按顺序更新好像很麻烦:( 应该要有个地方记录顺序,好复杂,搞不出来:) 退一步简单一点,用for检测两台服务器上正在更新的主机数量 比较数量进行分配到哪台服务器这样好实现点:) |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |