批处理代码发帖着色脚本 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
所有文件打包下载见附件:
[ Last edited by 无奈何 on 2006-7-30 at 23:53 ]
这是我当初学习 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
无奈何发表于: 2006-07-30 23:44
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- :: Batch2ubb.cmd -V0.30 -- 批处理转 UBB 代码
- :: 无奈何@cn-dos.net - 更新于:2005-7-30 - CMD & GAWK
- :: 用法:Batch2ubb
- :: 支持文件: - gawk.exe winclip.exe Batch2ubb.awk batch.esy
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- @echo off
- setlocal
- set path=%path%;%cd%;%~dp0
- set error=
- rem 文件完整性检查。
- for %%i in (gawk.exe winclip.exe batch.esy batch2ubb.awk) do (
- @if "%%~$PATH:i" == "" (
- echo 错误:程序所依赖文件 "%%i" 缺失。
- set error=错误:程序文件不完整。
- ) else ( set %%~ni="%%~$PATH:i" )
- )
- if defined error goto error
- rem 测试剪贴板数据类型。
- winclip -i |findstr /r ".*_.*TEXT" >nul
- if ERRORLEVEL 1 set error=错误:剪贴板为空或内容为非文字数据!
- rem 空参数调用获得剪贴板数据,将转换结果复制到剪贴板。
- if "%~1" == "" (
- if defined error goto error
- winclip -p |gawk -v line=1 -f %Batch2ubb% |winclip -c
- goto end
- )
- rem 只有一个参数时尝试作为输入文件处理,当其不存在时作参数处理。
- if "%~2" == "" (
- if exist "%~1" (
- gawk -v line=1 -f %Batch2ubb% "%~1" |winclip -c
- goto end
- )
- )
- set line=1
- set input=
- set out=
- :ParseLoop
- if "%~1" == "" goto Start
- if "%~1" == "/?" goto SwitchH
- rem 参数处理并转到相应标签。
- for %%s in (i I n N o O h H) do if "%~1"=="/%%s" goto Switch%%s
- set error=错误: 参数格式不正确 - "%1"!
- goto error
- :SwitchI
- set "input=%~2"
- if not exist "%input%" set error=警告:文件 "%input%" 不存在。 & goto error
- goto Next2Arg
- :SwitchO
- set "out=%~2"
- if not defined out set error=警告:请指定输出文件。 & goto error
- goto Next2Arg
- :SwitchN
- set line=0
- goto NextArg
- :Next2Arg
- shift
- :NextArg
- shift
- goto ParseLoop
- rem 不同参数分类判断处理。
- :Start
- if defined input (
- if defined out (
- gawk -v line=%line% -f %Batch2ubb% "%input%" >"%out%"
- ) else (
- gawk -v line=%line% -f %Batch2ubb% "%input%" |winclip -c
- )
- ) else (
- if defined out (
- if defined error goto error
- winclip -p |gawk -v line=%line% -f %Batch2ubb% >"%out%"
- ) else (
- if defined error goto error
- winclip -p |gawk -v line=0 -f %Batch2ubb% |winclip -c
- )
- )
- goto end
- :error
- echo.%error%
- echo.
- :SwitchH
- echo.批处理转 UBB 代码。
- echo.Batch2ubb
- echo.
- echo. /i 指定转换的文件,可包含路径,缺省从剪贴板获得。
- echo. /o 指定输出的文件,可包含路径,缺省输出到剪贴板。
- echo. /n 生成无行号的 UBB 代码,缺省带行号。
- echo. /h 显示本简短帮助,等价命令 /?。
- echo. 本程序执行依赖以下文件 gawk.exe winclip.exe Batch2ubb.awk batch.esy。
- echo.
- :end
Batch2ubb.awk
###########################################################
# Batch2ubb.awk -V0.2 -- 批处理转 UBB 代码脚本
# 无奈何 - 2005-7-2 -- GAWK 脚本
###########################################################
#读取配置文件,获取关键字
BEGIN {
IGNORECASE=1
while ((getline<"batch.esy") >0){
if ($0!~/^*;/ && $0!~/^$/) {
if ($0~/^*#LINECOMMENT=/){
LineComment=substr($0,index($0,"=")+1)
} else if ($0~/^*#VARIABLE=/){
Variable=substr($0,index($0,"=")+1)
} else if ($0~/^*#PARAMETER=/){
Parameter=substr($0,index($0,"=")+1)
} else if ($0~/^*#LABEL=/){
Label=substr($0,index($0,"=")+1)
} else if ($0~/^*#KEYWORD/){
color=substr($0,index($0,"=")+1)
} else {
keyword=color
}
}
}
print ""
if (line) print ""
}
#主程序开始
{
before=""
after=""
#处理注释行及标签行
if (($0~/^*::/) || ($0~/^*REM\>/)){
gsub(/=.*]/,"=" LineComment "]",before)
$0=before $0 after
}else if ($0~/^*:+/){
gsub(/=.*]/,"=" Label "]",before)
$0=before $0 after
} else {
temp=$0
#分割出关键字
gsub(/+/,"□",temp)
gsub(/(^□|□$)/,"",temp)
len=split(temp,word,"□+")
for (i=1;i<=len;i++){
# COLOR 关键字与 UBB 颜色字符重叠,单独处理
if (word~/COLOR/){
if(!fcolor){
gsub(/=.*]/,"=" keyword "]",before)
gsub("\\<" word "\\>",before "&" after,$0)
delete word
fcolor=1
} else
delete word
}
#删除重复关键字
for (j=i+1;j<=len;j++){
if (word==word)
delete word
}
}
for (i=1;i<=len;i++){
for (aa in keyword){
if (aa==toupper(word)){
gsub(/=.*]/,"=" keyword "]",before)
gsub("\\<" word "\\>",before "&" after,$0)
}
}
}
#处理变量及命令参数等细节部分
gsub(/=.*]/,"=" Variable "]",before)
gsub (/%+*%?/,before "&" after,$0)
gsub (/!+*!*/,before "&" after,$0)
gsub(/=.*]/,"=" Parameter "]",before)
gsub (/ \/+/,before "&" after,$0)
gsub (/(\(|\))/,"&",$0)
gsub (/(\")/,"&",$0)
}
if (line) print "- " $0
else print $0
}
END {
if (line) printf "
"
#添加时间戳自行修改作者名
print "" strftime("\t无奈何发表于: %Y-%m-%d %H:%M") ""
print "
"
}
所有文件打包下载见附件:
[ Last edited by 无奈何 on 2006-7-30 at 23:53 ]
本帖最近评分记录
(共 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
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

精华I