|
无奈何
荣誉版主
积分 1338
发帖 356
注册 2005-7-15
状态 离线
|
『楼 主』:
[原创]批处理代码发帖着色脚本 Batch2ubb(CMD & GAWK)
[原创]批处理代码发帖着色脚本 Batch2ubb(CMD & GAWK) 7.30 日更新
这是我当初学习 AWK 时作出的东西,一直存在一些问题没有解决,所以也就没有贴出来。最近一段时间不能上网就重写了一下,并加入了可支持参数的调用批处理,多参数调用构架是 Willsort 兄的大作,我直接拷贝过来,详见:[原创]批处理参数问题一点谈 http://www.cn-dos.net/forum/viewthread.php?tid=17785。
其中主要功能是由 GAWK 脚本完成的,剪贴板操作依赖于 winclip.exe ,语法文件是由我自己使用的 EmEditor 的批处理语法文件简化而来。所需执行文件下载链接:
winclip http://www.dmst.aueb.gr/dds/sw/outwit/outwit-bin-1.26.zip
gawk http://www.klabaster.com/progs/gawk32.zip
关于此批处理的使用,有几种调用方式交待一下:
1、直接双击运行。
2、命令行调用,Batch2ubb /h 查看具体参数用法。
3、在 sendto 建立快捷方式调用。
4、建立快捷方式并设定热键调用。
关于第 1 种运行方式,会将剪贴板中的代码转为 UBB 代码,重新写到剪贴板。
关于第 3 种运行方式,使用方法是开始、运行 输入 sendto ,在 sendto 目录建立指向 Batch2ubb.cmd 的快捷方式,然后右键选定欲转换的批处理文件执行发送到建立的快捷方式,转换的代码存于剪贴板。此种方法适用于已经存在的批处理的转换。
关于第 4 种运行方式,使用方法是在桌面或开始菜单中建立指向 Batch2ubb.cmd 的快捷方式并设定热键(后一位置重启后生效或在桌面按住F5键十秒种生效)或由 hoekey 等软件代劳,然后拷贝欲贴代码,按下热键,就可以在发帖窗口中粘贴了。并切可以在快捷方式中的目标位置选择是否启用 /n 参数。
另请自行修改 Batch2ubb.awk 中时间戳语句中的名字为自己的名字。有问题或建议欢迎跟帖讨论,我会尽量完善的。
Batch2ubb.cmd
Batch2ubb.awk
###########################################################
# Batch2ubb.awk -V0.2 -- 批处理转 UBB 代码脚本
# 无奈何 - 2005-7-2 -- GAWK 脚本
###########################################################
#读取配置文件,获取关键字
BEGIN {
IGNORECASE=1
while ((getline<"batch.esy") >0){
if ($0!~/^[ \t]*;/ && $0!~/^$/) {
if ($0~/^[ \t]*#LINECOMMENT=/){
LineComment=substr($0,index($0,"=")+1)
} else if ($0~/^[ \t]*#VARIABLE=/){
Variable=substr($0,index($0,"=")+1)
} else if ($0~/^[ \t]*#PARAMETER=/){
Parameter=substr($0,index($0,"=")+1)
} else if ($0~/^[ \t]*#LABEL=/){
Label=substr($0,index($0,"=")+1)
} else if ($0~/^[ \t]*#KEYWORD/){
color[++i]=substr($0,index($0,"=")+1)
} else {
keyword[$0]=color[i]
}
}
}
print "[quote]"
if (line) print "[list=1]"
}
#主程序开始
{
before="[color=]"
after="[/color]"
#处理注释行及标签行
if (($0~/^[ \t]*::/) || ($0~/^[ \t]*REM\>/)){
gsub(/=.*]/,"=" LineComment "]",before)
$0=before $0 after
}else if ($0~/^[ \t]*:[^:]+/){
gsub(/=.*]/,"=" Label "]",before)
$0=before $0 after
} else {
temp=$0
#分割出关键字
gsub(/[][ \t,;'`~:+"=()<>{}^&|@\.]+/,"□",temp)
gsub(/(^□|□$)/,"",temp)
len=split(temp,word,"□+")
for (i=1;i<=len;i++){
# COLOR 关键字与 UBB 颜色字符重叠,单独处理
if (word[i]~/COLOR/){
if(!fcolor){
gsub(/=.*]/,"=" keyword["COLOR"] "]",before)
gsub("\\<" word[i] "\\>",before "&" after,$0)
delete word[i]
fcolor=1
} else
delete word[i]
}
#删除重复关键字
for (j=i+1;j<=len;j++){
if (word[i]==word[j])
delete word[j]
}
}
for (i=1;i<=len;i++){
for (aa in keyword){
if (aa==toupper(word[i])){
gsub(/=.*]/,"=" keyword[aa] "]",before)
gsub("\\<" word[i] "\\>",before "&" after,$0)
}
}
}
#处理变量及命令参数等细节部分
gsub(/=.*]/,"=" Variable "]",before)
gsub (/%+[A-Za-z0-9:~]*%?/,before "&" after,$0)
gsub (/!+[A-Za-z0-9:~]*!*/,before "&" after,$0)
gsub(/=.*]/,"=" Parameter "]",before)
gsub (/ \/[A-Za-z?\-]+/,before "&" after,$0)
gsub (/(\(|\))/,"[b]&[/b]",$0)
gsub (/(\")/,"[b]&[/b]",$0)
}
if (line) print "[*]" $0
else print $0
}
END {
if (line) printf "[/list]"
#添加时间戳自行修改作者名
print "[color=White]" strftime("\t无奈何发表于: %Y-%m-%d %H:%M") "[/color]"
print "[/quote]"
} 所有文件打包下载见附件:
[ Last edited by 无奈何 on 2006-7-30 at 23:53 ]
此帖被 +19 点积分 点击查看详情 评分人:【 redtek 】 | 分数: +2 | 时间:2006-11-3 00:30 | 评分人:【 hxuan999 】 | 分数: +2 | 时间:2006-11-28 06:45 | 评分人:【 ccwan 】 | 分数: +15 | 时间:2007-2-9 03:30 |
|
附件
1: Batch2ubb.zip (2006-7-8 23:30, 145.3 K, 下载附件所需积分 1 点
,下载次数: 385)
附件
2: Batch2ubb_V0.3.zip (2006-7-30 23:52, 145.46 K, 下载附件所需积分 1 点
,下载次数: 490)
|
☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul
|
|
2006-7-3 20:16 |
|
|
220110
荣誉版主
积分 718
发帖 313
注册 2005-9-26
状态 离线
|
『第
2 楼』:
re 无奈何
Batch2ubb.cmd 是否漏了 endlocal ?
怪不得这两天见你的贴子充满着色彩,我心想无奈何你不会无奈何到这样玩吧,哈哈,原来还有这必杀技,有创意!顶..
[ Last edited by 220110 on 2006-7-4 at 09:49 ]
|
|
2006-7-4 09:47 |
|
|
无奈何
荣誉版主
积分 1338
发帖 356
注册 2005-7-15
状态 离线
|
『第
3 楼』:
Re 220110
哈哈,无奈中多一点色彩。^_^
endlocal 并非漏掉,因为在批处理结束处暗含一个 endlocal 命令,所以 endlocal 可以省略。如果含有多段 setlocal 的话加上结束环境更改是必要的。
|
☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul
|
|
2006-7-4 21:22 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
4 楼』:
Quote: |
- @echo off
- set Version=VIRDEFVER
- find /i virusdb.cfg "%Version%"
- if not errorlevel 1 set Version=VersionNo
- for /F "tokens=1 delims=VIRDEFVER " %%A in ('find /i .\Rav\virusdb.cfg "VIRDEFVER"') do set No=%%A
- for /F "tokens=1 delims=VIRDEFUPDATEDATE " %%B in ('find /i .\Rav\virusdb.cfg "VIRDEFUPDATEDATE"') do set DATENO=%%B
- echo [Version]>.\001\VERSION.INF
- echo %Version%%NO%>>.\001\VERSION.INF
- echo UpdateDate%DATENO%>>.\001\VERSION.INF
DOS一跟葱 2006-07-06 13:46 |
|
老大怎么签名字体是白的?
|
|
2006-7-6 13:59 |
|
|
zhaxi
初级用户
积分 112
发帖 40
注册 2006-6-23
状态 离线
|
|
2006-7-6 19:10 |
|
|
doscc
中级用户
积分 256
发帖 93
注册 2006-3-26 来自 广东
状态 离线
|
|
2006-7-6 21:10 |
|
|
无奈何
荣誉版主
积分 1338
发帖 356
注册 2005-7-15
状态 离线
|
『第
7 楼』:
Re fastslz
我添加时间戳记的目的有两个
1、利用戳记中的部分字句作为全文搜索的关键词,来查找自己发过的含有代码的帖子。
2、简单的添加时间标记。
关于 1 象1楼中单纯使用用户名作标记并不是很明智的做法,因为会搜到很多其他的帖子,所以个性一点的词句效果会好一些。关于为什么选择白色的,只是希望更含蓄一些,当然可以根据自己的喜好更改为更顺心的颜色。
Re zhaxi
如果觉得设置快捷方式比较复杂,可以直接从命令行中调用。
更简单的方法是将要发帖的批处理代码拷贝到剪贴板,双击运行 Batch2ubb.cmd ,然后就可以粘贴转换后的代码了。
我更新了一下,并且多添加了一些说明。
[ Last edited by 无奈何 on 2006-7-8 at 23:33 ]
|
☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul
|
|
2006-7-8 16:48 |
|
|
IceCrack
中级用户
DOS之友
积分 332
发帖 168
注册 2005-10-6 来自 天涯
状态 离线
|
『第
8 楼』:
Quote: |
- @echo off
- :start
- setlocal ENABLEDELAYEDEXPANSION
- :loop_a
- del tmp*.txt 2>nul
- for /l %%i in (1,1,6) do (
- echo %random% >nul
- set /a s%%i=!random:~-1!
- echo %random% >nul
- set /a g%%i=!random:~-1!
- if "!s%%i!"=="0" (set /a _VAR_=!g%%i! / 3) else (set /a _VAR_=!s%%i!!g%%i! / 3)
- if "!_VAR_:~1,1!"=="" set _VAR_=0!_VAR_!
-
- findstr /m "!_VAR_!" tmp.txt 2>nul >nul && goto :loop_a
- if "!_VAR_!"=="00" (echo 33>>tmp.txt) else (echo !_VAR_!>>tmp.txt)
- )
- sort tmp.txt>tmp1.txt
- endlocal
- :loop_b
- setlocal ENABLEDELAYEDEXPANSION
- echo %random% >nul
- set /a s=!random:~-1!
- echo %random% >nul
- set /a g=!random:~-1!
-
- if "!s!"=="0" (set /a _VAR_=!g! / 6) else (set /a _VAR_=!s!!g! / 6)
- if "!_VAR_:~1,1!"=="" set _VAR_=0!_VAR_!
- echo ^|>>tmp1.txt
- if "!_VAR_!"=="00" (echo 16>>tmp1.txt) else (echo !_VAR_!>>tmp1.txt)
- endlocal
- :echo
- setlocal ENABLEDELAYEDEXPANSION
- for /f %%i in (tmp1.txt) do (
- set n=%%i
- set m=!m! !n!
- )
- del tmp*.txt
- cls
- echo.
- echo.¥1000000000000000000000000000000000000000000.00
- echo.
- echo. Hitme,双色球必中,号码是 !m!
- echo.
- echo.¥1000000000000000000000000000000000000000000.00
- echo.
- :save
- set /p x=保留号码至num.txt[y/n]
- if /i [%x%]==[y] (echo !m!>>num.txt && endlocal && goto :start) else (endlocal && goto :start)
IceCrack发表于: 2006-07-14 08:13 |
|
呵呵 效果还不错啊 又仔细的玩了一下, 觉得应该是这样的当剪切板上没有数据。且没有参数的情况下,跳转到帮助文件。而且在dos窗口下应该支持 /h /? 以及无参数都跳转到帮助文件。我是这样认为的。
[ Last edited by IceCrack on 2006-7-14 at 08:32 ]
|
|
2006-7-14 08:21 |
|
|
无奈何
荣誉版主
积分 1338
发帖 356
注册 2005-7-15
状态 离线
|
『第
9 楼』:
谢谢 IceCrack 兄的建议。更新了一下 Batch2ubb.cmd 到 V0.3 版。有兴趣的朋友可以对比一下老版。
|
☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul
|
|
2006-7-30 23:50 |
|
|
NaturalJ0
银牌会员
积分 1181
发帖 533
注册 2006-8-14
状态 离线
|
『第
10 楼』:
这程序太赞了,非常实用,不但好看,理解别人写的代码时条理也清楚多了。
|
|
2006-11-2 02:50 |
|
|
yangzhiyi
中级用户
积分 261
发帖 123
注册 2006-6-6
状态 离线
|
『第
11 楼』:
好强,以后发贴都用一下
CODE: [Copy to clipboard] 这个怎么做呢?
|
|
2006-11-2 06:47 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
12 楼』:
下载以后一使用发现简直太方便了!!!
这个自动给批处理行号的功能非常有意思,要是讨论个某行某段的语句一说行号就行了~:)
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-11-3 00:34 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
13 楼』:
呵呵。厉害啊~~无奈何兄一发帖就是好帖~顶~
|
|
2006-11-27 10:17 |
|
|
vlq5299
初级用户
积分 136
发帖 59
注册 2006-6-2
状态 离线
|
|
2006-12-5 03:17 |
|
|
scriptor
银牌会员
积分 1187
发帖 555
注册 2006-12-21
状态 离线
|
『第
15 楼』:
好厉害!
又解决了我的一个心病啊
赞一个
|
|
2006-12-24 02:52 |
|
|