Board logo

标题: 批处理源代码格式化工具 [打印本页]

作者: plp626    时间: 2011-8-21 20:12     标题: 批处理源代码格式化工具

本帖最后由 plp626 于 2011-8-21 21:11 编辑

coolformat不支持批处理代码,这需要我们自己编写一个针对批处理代码风格的格式化工具
(语言不限,可以用vbs,也可以用C语言,批处理实现更好);

爱心提示:对cmd的预处理不精通者慎入

格式化标准:
tab符用4个空格代替,对于&连接的多个命令分行执行,在代码风格上做到结构紧凑,逻辑清晰;
举几个例:
  1. FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
复制代码
格式化为:
  1. FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do (
  2.     @echo %i %j %k
  3. )
复制代码
=========================
  1. IF EXIST filename. (
  2.     del filename.
  3. ) ELSE (
  4.     echo filename. missing.
  5. )
复制代码
格式化为:
  1. IF EXIST filename. ( del filename. ) ELSE (
  2.     echo filename. missing.
  3. )
复制代码
======================
  1. IF EXIST filename. (del filename.) ELSE echo filename1 missing.&if exist filename2 (del filename2) else echo filename2 missing.
复制代码
转换为:
  1. IF EXIST filename. ( del filename. ) ELSE (
  2.     echo filename1 missing.
  3.     if exist filename2 ( del filename2 ) ELSE (
  4.         echo filename2 missing.
  5.     )
  6. )
复制代码
======================
  1. @echo off&setlocal enabledelayedexpansion
复制代码
格式化为:
  1. @echo off
  2. setlocal enabledelayedexpansion
复制代码
其次,我们可以让这个格式化工具,支持代码体积最小化,
即格式化为最紧凑最短小格式(满足一些人的精小代码偏好)

最后,这个格式化工具支持把标签子过程,转换为“变量型函数”的功能(以便提高函数调用速度);
      反之,我们也可以用该工具把变量型函数还原为标签子过程(以便我们阅读,和调试的方便)
(对于不能转换为变量型函数的,给出具体位置,用call来间接实现),举一个简单例子:
  1. :strlen %1=变量名, %2=返回变量名
  2. set $=!%1!#
  3. set "%2="
  4. for %%a in (2048 1024 512 256 128 64 32 16 8 4 2 1)do (
  5.     if !$:~%%a!. NEQ . set/a%2+=%%a&set $=!$:~%%a!
  6. )
复制代码
转化为:
  1. 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!"
复制代码
或者为:
  1. 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

  1. FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
复制代码
格式化为
  1. 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用 _(空格下杠)断行连接
  1. str1="Hello":str2=" world"
  2. MsgBox str1&str2
  3. MsgBox str1 _
  4.        &str2
复制代码

作者: Hello123World    时间: 2011-8-22 13:39

我很好奇,楼主头像那个外国老头是谁……
作者: Demon    时间: 2012-1-24 22:51

对于这种没有任何语法可言的脚本,我只能望而却步。
作者: garyng    时间: 2012-6-8 13:30

每个人的代码风格不同的嘛~




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2