找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22934|回复: 7

批处理源代码格式化工具

[复制链接]
发表于 2011-8-21 20:12:16 | 显示全部楼层 |阅读模式
本帖最后由 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^!"
复制代码
发表于 2011-8-21 20:30:49 | 显示全部楼层
什么叫结构紧凑?什么叫逻辑清晰?
if那个例子转换之前比转换之后更清晰吧。如果每个分支里面有多条语句,按照你的思路,if岂不是会越转越乱。
最后那个例子你觉得转换之后清晰了?
 楼主| 发表于 2011-8-21 20:40:08 | 显示全部楼层
不必拘泥于此贴的标准,标准是大家共同认可的。
讨论讨论
发表于 2011-8-22 10:25:20 | 显示全部楼层
  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
复制代码
行不?
这个用法我经常用于写入注册表修改程序打开方式
发表于 2011-8-22 10:46:01 | 显示全部楼层
批处理用&连接的多个命令分行执行但goto语法受限
vbs用&连接
vbs用:分行(但for语法受限)
vbs用 _(空格下杠)断行连接
  1. str1="Hello":str2=" world"
  2. MsgBox str1&str2
  3. MsgBox str1 _
  4.        &str2
复制代码
发表于 2011-8-22 13:39:23 | 显示全部楼层
我很好奇,楼主头像那个外国老头是谁……
发表于 2012-1-24 22:51:54 | 显示全部楼层
对于这种没有任何语法可言的脚本,我只能望而却步。
发表于 2012-6-8 13:30:05 | 显示全部楼层
每个人的代码风格不同的嘛~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 03:36 , Processed in 0.018723 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表