标题: 批处理源代码格式化工具 [打印本页]
作者: plp626 时间: 2011-8-21 20:12 标题: 批处理源代码格式化工具
本帖最后由 plp626 于 2011-8-21 21:11 编辑
coolformat不支持批处理代码,这需要我们自己编写一个针对批处理代码风格的格式化工具
(语言不限,可以用vbs,也可以用C语言,批处理实现更好);
爱心提示:对cmd的预处理不精通者慎入
格式化标准:
tab符用4个空格代替,对于&连接的多个命令分行执行,在代码风格上做到结构紧凑,逻辑清晰;
举几个例:- FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
复制代码
格式化为:- FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do (
- @echo %i %j %k
- )
复制代码
=========================- IF EXIST filename. (
- del filename.
- ) ELSE (
- echo filename. missing.
- )
复制代码
格式化为:- IF EXIST filename. ( del filename. ) ELSE (
- echo filename. missing.
- )
复制代码
======================- IF EXIST filename. (del filename.) ELSE echo filename1 missing.&if exist filename2 (del filename2) else echo filename2 missing.
复制代码
转换为:- IF EXIST filename. ( del filename. ) ELSE (
- echo filename1 missing.
- if exist filename2 ( del filename2 ) ELSE (
- echo filename2 missing.
- )
- )
复制代码
======================- @echo off&setlocal enabledelayedexpansion
复制代码
格式化为:- @echo off
- setlocal enabledelayedexpansion
复制代码
其次,我们可以让这个格式化工具,支持代码体积最小化,
即格式化为最紧凑最短小格式(满足一些人的精小代码偏好)
最后,这个格式化工具支持把标签子过程,转换为“变量型函数”的功能(以便提高函数调用速度);
反之,我们也可以用该工具把变量型函数还原为标签子过程(以便我们阅读,和调试的方便)
(对于不能转换为变量型函数的,给出具体位置,用call来间接实现),举一个简单例子:- :strlen %1=变量名, %2=返回变量名
- set $=!%1!#
- set "%2="
- for %%a in (2048 1024 512 256 128 64 32 16 8 4 2 1)do (
- if !$:~%%a!. NEQ . set/a%2+=%%a&set $=!$:~%%a!
- )
复制代码
转化为:- set "_strlen=set $=!#1!#&set #2=&for %%a in (2048 1024 512 256 128 64 32 16 8 4 2 1)do if !$:~%%a!. NEQ . set/a#2+=%%a&set $=!$:~%%a!"
复制代码
或者为:- set "_strlen=set $=^!#1^!#&set #2=&for %%a in (2048 1024 512 256 128 64 32 16 8 4 2 1)do if ^!$:~%%a^!. NEQ . set/a#2+=%%a&set $=^!$:~%%a^!"
复制代码
作者: CUer 时间: 2011-8-21 20:30
什么叫结构紧凑?什么叫逻辑清晰?
if那个例子转换之前比转换之后更清晰吧。如果每个分支里面有多条语句,按照你的思路,if岂不是会越转越乱。
最后那个例子你觉得转换之后清晰了?
作者: plp626 时间: 2011-8-21 20:40
不必拘泥于此贴的标准,标准是大家共同认可的。
讨论讨论
作者: fastslz 时间: 2011-8-22 10:25
- FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
复制代码
格式化为- FOR,/F,"eol=; tokens=2,3* delims=, ",%i,in,(myfile.txt),do,@echo,%i %j %k
复制代码
行不?
这个用法我经常用于写入注册表修改程序打开方式
作者: fastslz 时间: 2011-8-22 10:46
批处理用&连接的多个命令分行执行但goto语法受限
vbs用&连接
vbs用:分行(但for语法受限)
vbs用 _(空格下杠)断行连接- str1="Hello":str2=" world"
- MsgBox str1&str2
- MsgBox str1 _
- &str2
复制代码
作者: Hello123World 时间: 2011-8-22 13:39
我很好奇,楼主头像那个外国老头是谁……
作者: Demon 时间: 2012-1-24 22:51
对于这种没有任何语法可言的脚本,我只能望而却步。
作者: garyng 时间: 2012-6-8 13:30
每个人的代码风格不同的嘛~
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |