中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 全自动添加后台.bat 上一主题 | 下一主题
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『楼 主』:  全自动添加后台.bat

编写、测试、运行环境:WINDOWS XP SP3 ,WINDOWS SERVER 2003
MS SQLSER 2005

利用到的工具:
MS SQLSER 2005
自带的SQLCMD 命令工具


全自动添加后台.bat
这是一个WEB 游戏后台自动添加的批处理
没有实际的测试环境或者运行环境,比较难说清楚代码都在做些什么事情,我就大概说下实现的功能好

1,第一次运行把自身加入任务计划,每小时运行一次
2,通过 SQLCMD 命令行工具连接数据库查询最大用户ID
3, 计算需要添加多少组后台
4,利用白杨的FR 命令行工具编辑配置文件。
@echo off
title 全自动加后台。。。依山居19:14 2009-1-22
setlocal enabledelayedexpansion

::计划任务名
set tn=全自动添加后台
::几小时运行一次
set xh=1
::计划运行时间
set st=07:00:00
set tr=%0

::后台路径
set bg=%cd:~0,2%\diguoserver\activeserver

::MINID MAXID差
set /a step=3000

::文件名前缀
set fn=qidian_diguo

::文件夹名过滤,包含特定字符串的文件夹,会被排除
set gl=/c:"1-10000"

::SQL用户名
set user=em
::SQL 密码
set pass=eXBn
::SQL数据库名
set data=em
::数据库服务器地址
set server=192.168.0.229

:start
::判断任务计划服务是否启动
net start|find "Task Scheduler"||goto sctask

::判断计划是否已经添加
schtasks /query|find "%tn%"||goto crtask

del mssqlid.txt

::连接数据库查询最大用户ID,结果写入mssqlid.txt
sqlcmd -S %server% -U %user% -P %pass% -d %data% -Q "select max(id) from player" >mssqlid.txt
::sqlcmd -d %data% -Q "select max(id) from player" >mssqlid.txt


for /f %%a in ('findstr  /r /c:"\<[0-9]*[0-9]$" mssqlid.txt') do (
        if %%a == "" goto :eof
        set /a id=%%a
)

del mssqlid.txt

::查询不到ID,ID=0 退出。
if %id% equ 0 goto :eof
if %id%=="" goto :eof

echo 目前最大的用户ID:%id%


::找出ID最大的后台
for /f "delims=- tokens=1,2" %%i in ('dir /b /a:d %bg%^|findstr /v %gl%') do (
        set T=%%i
        set /a num=!T:~12!
        if !num! GTR !max1! (
                set /a max1=!num!
                set /a max2=%%j
)
        if !num! equ 1 if %%j geq 10000 set /a max2=3000
)

::ID小于MAX1-%step%则退出
set /a tm=%max1%-%step%
if %id% LSS %tm% goto :EOF

::计算需要加多少组后台

set /a x=(%id%-%max1%)/%step%+3



::循环添加X组后台
:loop

set /a x=x-1
if %x% EQU 0 goto :EOF

::找出ID最大的后台
for /f "delims=- tokens=1,2" %%i in ('dir /b /a:d %bg%^|findstr /v %gl%') do (
        set T=%%i
        set /a num=!T:~12!
        if !num! GTR !max1! (
                set /a max1=!num!
                set /a max2=%%j
)
        if !num! equ 1 if %%j geq 10000 set /a max2=3000
)

::算出要添加的后台文件名
set /a newid1=%max1%+%step%
set /a newid2=%max2%+%step%


::把后台ID最大的目录复制成新添加后台目录
xcopy /s /y %bg%\%fn%%max1%-%max2%\*.* %bg%\%fn%%newid1%-%newid2%\

::重命名
ren %bg%\%fn%%newid1%-%newid2%\%fn%%max1%-%max2%.bat %fn%%newid1%-%newid2%.bat
ren %bg%\%fn%%newid1%-%newid2%\%fn%%max1%-%max2%.exe %fn%%newid1%-%newid2%.exe

::生成.bat
echo cd /d %bg%\%fn%%newid1%-%newid2%\>%bg%\%fn%%newid1%-%newid2%\%fn%%newid1%-%newid2%.bat
echo start %fn%%newid1%-%newid2%.exe>>%bg%\%fn%%newid1%-%newid2%\%fn%%newid1%-%newid2%.bat


::修改PUB.xml
fr -ric:"minid=\"[0-9]*\"" -t:"minid=\"%newid1%\"" %bg%\%fn%%newid1%-%newid2%\pub.xml
fr -ric:"maxid=\"[0-9]*\"" -t:"maxid=\"%newid2%\"" %bg%\%fn%%newid1%-%newid2%\pub.xml

::启动后台
::cd /d %bg%\%fn%%newid1%-%newid2%
::start %fn%%newid1%-%newid2%.exe

goto loop


:sctask
:: 设置启动任务计划服务
sc config schedule start= auto
ping 127.0.0.1 -n 3|ECHO>nul
net start schedule
goto start

:crtask
schtasks /create /ru "system" /sc hourly /mo %xh% /st %st%  /tn "%tn%" /tr %0

goto start
[ Last edited by yishanju on 2009-1-22 at 20:48 ]

   此帖被 +8 点积分     点击查看详情   
评分人:【 HAT 分数: +8  时间:2009-2-6 14:01


附件 1: fr.rar (2009-1-23 06:07, 154.9 K,下载次数: 83)



有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-1-22 20:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 2 楼』:  

刚刚写完全部功能,并通过本地环境的测试
很是兴奋,先把代码贴上来,其它再说




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-1-22 20:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 3 楼』:  

http://upload.cn-dos.net/img/1282.rar

简介

fr - 在文件中批量查找并替换匹配的字符串
支持一次性指定多个文件通配符和文件列表。
支持管道模式,与其它命令协同工作;支持半管道模式,从文件中获取输入,但将结果写到标准输出。
支持包含子目录。
支持普通匹配、正则匹配、可忽略大小写、可跨行匹配。替换时可以使用正则的子表达式。
支持高级正则表达式(ARE)。
同时支持 posix 标准的扩展正则表达式及 perl 风格的正则匹配。
可以格式化替换内容为全大写或全小写,便于在批处理中对环境变量和命令行参数做大小写一致化处理。
支持 DOS(Windows)、Macintosh 和 unix 风格的换行符,可选择自动识别(默认)或手动指定。
统计功能,列出每个文件中的替换次数、总替换次数等。
支持Win32和纯DOS环境(纯DOS环境中需要 HX DOS Extender 支持)。


 
更新历史

2008-09-09, Ver 2.1.4.0909
UPD: 增强了正则行首锚点 '^' 的适应性。

2008-09-08, Ver 2.1.3.0908
FIX: 纠正了正则表达式零长匹配时会出现无限循环的问题(例如,在内容“aaa.bbb”中将“[^.]*”替换为“z”)。
FIX: 纠正了正则行首锚点解析不正确的问题(例如,在内容“ccc”将“^c”替换为“z”)。

2008-08-16 Ver 2.1.2.1126
新增高级正则表达式(ARE)支持

2007-01-20 Ver 2.1.1.120
新增 -exp 选项,开启该选项后,程序的内存使用量将增加一倍,但是在很多情况下,其处理速度将得到极大改善。碰到性能问题的弟兄们可以试试。

该算法使用额外的内存消除了原地替换时带来的内存抖动,所以文件中要替换的值越多,算法带来的性能提升就越明显。在 siwen@CCF 兄提供给我的样本上测试,开启了 -exp 选项以后,fr 完成任务的时间从 1小时 降低到 1.5 秒(文件体积 8.5MB,文件中需要替换的项目为 25 万项)。


 

典型应用

在命令行中单独使用,或作为管道过滤器使用。例如:“unzip -l *.zip | fr /r:"^(.{22}:\d\d\s*|(A| \a| -|.*files$).*\n)" /t”将当前目录下的所有zip文件中的文件干净地列出,同时过滤标题行、统计行以及每行的文件大小、修改时间等内容。
 
在批处理中应用。批处理片断:fr *.lst -fic:NewDir -tu:"%1" 将当前目录下所有 .lst 文件中的 newdir 替换为第一个命令行参数(全大写)。

另一个简单的例子:将“@fr kog-Swd5b.sfv /r:"^(.*) (\x\x)(\x\x)(\x\x)(\x\x)$" /t:"\5\4\3\2 *\1"”保存为批处理文件“sfv2hash.bat”,在下载任何带有 sfv 校验信息的文件后,可以使用 sfv2hash check.sfv 将其转换为标准 hash 信息格式。然后就可以使用 crypto v check.sfv /halgm:crc32 或其它散列验证工具进行文件验证。
 
与其它工具配合使用。


 

简单中文帮助

C:\Documents and Settings\Administrator>
#fr

===============================================================================
  find and replace Ver 2.1.1.120 by BaiYang / 2004 - 2007, 免费软件
                   主页地址 - http://baiy.cn
===============================================================================
在文件和管道中寻找字符串,并将它们替换为其它内容

用法: fr [文件通配符1 文件通配符2 ...] {查找选项:查找内容} {替换选项:替换为}
         [其它选项]

===============================================================================
查找选项:
  -f:      - 匹配精确串
  -fic:    - 匹配精确串(忽略大小写)
  -r:      - 正则表达式匹配
  -ric:    - 正则表达式匹配(忽略大小写)
  -rnnl:   - 跨行正则匹配
  -rnnlic: - 跨行正则匹配(忽略大小写)

===============================================================================
替换选项:
  -t:      - 将匹配的内容替换为指定字符串
  -tu:     - 先将指定的“替换为”字符串变为大写,然后开始替换
  -tl:     - 先将指定的“替换为”字符串变为小写,然后开始替换
  -h -?    - 当前屏幕
  注意: 如果您正在使用正则匹配,那么您可以在“替换为”字符串中使用子表达式代换
        (\0 ~ \9)

===============================================================================
其它选项:
  -s       - 包含子目录
  -exp     - 启用内存扩展算法,将会加倍 fr 的内存使用量,但是很多时候可以极大地
             提高执行效率。如果你碰到了性能问题,可以尝试开启该选项。
  -stdin   - 从标准输入设备获得要查找的内容,并将结果从到标准输出设备(如果未指
             定任何文件模板的话,则自动启用该选项)
  -stdout  - 像平时一样, 从文件中获得输入, 但将结果送到标准输出(而不是写回文
             件)
  -frc     - 显示每个文件内发生的替换次数
  -trc     - 显示所有文件总共发生的替换次数

===============================================================================
POSIX 和 Perl 风格的正则表达式:

  - "find - replace" 完整支持 POSIX.2 扩展标准及 Perl 风格的正则表达式。
    以下是支持的字符类及其对应关系:
       POSIX           perl       描述
       --------------------------------------------------------------------
       [:alnum:]                  字母和数字
       [:alpha:]       \a         字母
       [:lower:]       \l         小写字母
       [:upper:]       \u         大写字母
       [:blank:]                  空格和制表符
       [:space:]       \s         空白字符
       [:cntrl:]                  控制字符
       [:digit:]       \d         十进制数字
       [:xdigit:]      \x         十六进制数字
       [:graph:]                  可打印字符(不包括空白符)
       [:print:]       \p         可打印字符(包括空白符)
       [:punct:]                  标点符号

  - 以下是一些 perl 的特殊字符类:
       perl   POSIX等效         描述
       --------------------------------------------------------------------
       \o     [0-7]             八进制数字
       \O     [^0-7]            非八进制数字
       \w     [[:alnum:]_]      单词组成
       \W     [^[:alnum:]_]     非单词组成
       \A     [^[:alpha:]]      非字母
       \L     [^[:lower:]]      非小写字母
       \U     [^[:upper:]]      非大写字母
       \S     [^[:space:]]      非空白符
       \D     [^[:digit:]]      非十进制数字
       \X     [^[:xdigit:]]     非十六进制数字
       \P     [^[:print:]]      非可打印字符
       \<     [^[:alpha:]_]     单词开始
       \>     [^[:alnum:]_]     单词结束

  - 注意: posix 字符类是必须工作在集合中的(“[”和“]”内)。相反,perl 风格
          的字符类是工作在集合运算之外的。

  - 此外,为了便于在命令行输入一些特殊字符,特别定义了一下别名:
       perl风格      POSIX风格       描述
       -----------------------------------------------------------------------
       \"            [:dq:]          双引号
       \'            [:sq:]          单引号
       \t            [:tb:]          制表符
       \n            [:nl:]          换行符 (0x0A)
       \r            [:rt:]          回车符 (0x0D)
       \b            [:bs:]          退格符

===============================================================================
开关的前缀和后缀:
  * 所有命令行开关(选项)都是大小写无关的(如: "-fic:" 和 "-FIC:")
  * 开关的前缀可以是 "-" 或 "/"(如: "/s" 和 "-s")
  * 开关的后缀可以是 ":" 或 "="(如: "/f:", "/f=", "-f:" 和 "-f=" 等效)

===============================================================================
应用示例:
  fr *.txt *.htm -f:teh -t:the
  fr *.txt -fic:"My Dir" -tu:"%ROOTDIR%"
  type server.log | fr /r:"Connected.*218.79" /t:"**Attack** \0"
  type server.log | fr /r:"^(Smith|James).*\n" /t
  unzip -l *.zip | fr /r:"^(.{22}:\d\d\s*|(A|  \a| -|.*files$).*\n)" /




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-1-23 06:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 4 楼』:  

C:\Documents and Settings\webgame>sqlcmd /?
Microsoft (R) SQL Server 命令行工具
版本 9.00.1399.06 NT INTEL X86
版权所有 (c) Microsoft Corporation。保留所有权利。

用法: Sqlcmd            [-U 登录 ID]          [-P 密码]
  [-S 服务器]            [-H 主机名]          [-E 可信连接]
  [-d 使用数据库名称] [-l 登录超时值]     [-t 查询超时值]
  [-h 标题]           [-s 列分隔符]      [-w 屏幕宽度]
  [-a 数据包大小]        [-e 回显输入]        [-I 允许带引号的标识符]
  [-c 命令结束]            [-L[c] 列出服务器[清除输出]]
  [-q "命令行查询"]   [-Q "命令行查询" 并退出]
  [-m 错误级别]        [-V 严重级别]     [-W 删除尾随空格]
  [-u unicode 输出]    [-r[0|1] 发送到 stderr 的消息]
  [-i 输入文件]         [-o 输出文件]        [-z 新密码]
  [-f <代码页> | i:<代码页>[,o:<代码页>]] [-Z 新建密码并退出]
  [-k[1|2] 删除[替换]控制字符]
  [-y 可变长度类型显示宽度]
  [-Y 固定长度类型显示宽度]
  [-p[1] 打印统计信息[冒号格式]]
  [-R 使用客户端区域设置]
  [-b 出错时中止批处理]
  [-v 变量 = "值"...]  [-A 专用管理连接]
  [-X[1] 禁用命令、启动脚本、环境变量[并退出]]
  [-x 禁用变量情况]
  [-? 显示语法摘要]




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-1-23 06:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 5 楼』:  

C:\Documents and Settings\webgame>osql /?
Microsoft (R) SQL Server 命令行工具
版本 9.00.1399.06 NT INTEL X86
版权所有 (c) Microsoft Corporation。保留所有权利。

注意: osql 并不支持 SQL Server 2005的所有功能。
请使用 sqlcmd。有关详细信息,请参阅 SQL Server 联机丛书。

用法: osql                   [-U 登录 ID]          [-P 密码]
  [-S 服务器]                [-H 主机名]           [-E 可信连接]
  [-d 使用数据库名称]        [-l 登录超时值]       [-t 查询超时值]
  [-h 标题]                  [-s 列分隔符]         [-w 列宽]
  [-a 数据包大小]            [-e 回显输入]         [-I 允许带引号的标识符]
  [-L 列出服务器]            [-c 命令结束]         [-D ODBC DSN 名称]
  [-q "命令行查询"]          [-Q "命令行查询" 并退出]
  [-n 删除编号方式]          [-m 错误级别]
  [-r 发送到 stderr 的消息]  [-V 严重级别]
  [-i 输入文件]              [-o 输出文件]
  [-p 打印统计信息]               [-b 出错时中止批处理]
  [-X[1] 禁用命令,[退出的同时显示警告]]
  [-O 使用旧 ISQL 行为禁用下列项]
      <EOF> 批处理
      自动调整控制台宽度
      宽消息
      默认错误级别为 -1 和 1
  [-? 显示语法摘要]




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-1-23 06:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
samliu
新手上路





积分 15
发帖 15
注册 2009-1-24
状态 离线
『第 6 楼』:  

笔记已经做完了
我要慢慢的回去
好好学习  学习

如果我我有问题    再回来向楼主请教


先谢谢了

2009-2-5 22:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
caiye211221
新手上路





积分 13
发帖 18
注册 2009-1-31
状态 离线
『第 7 楼』:  

太高科了,看不懂,呵呵。

2009-2-13 20:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sqwxd
新手上路





积分 10
发帖 8
注册 2009-9-9
状态 离线
『第 8 楼』:  

谢谢分享~~

有空试试!!!

2009-9-10 00:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: