Cpp代码格式化——脚本 FormatCpp.bat
功能:
使用 astyle.exe 对 Cpp 代码进行格式化。类似于 VC6.0 的 Alt+F8 的功能。但是 astyle.exe 提供更灵活和强大的格式化能力。
关于此批处理的使用,有几种调用方式:
1、直接双击运行。
2、在 sendto 建立快捷方式调用。
3、建立快捷方式并设定热键调用。
4、命令行调用,FormatCpp /h 查看具体参数用法。
执行方式的说明:
①、DoubleClick FormatCpp:clip → clip 。
即 将剪贴板中的代码格式化,重新写到剪贴板。
②、Sendto FormatCpp:file → clip 。
step1:开始、运行 输入 sendto ,在 sendto 目录建立指向 FormatCpp.cmd 的快捷方式;
step2:然后右键选定欲转换的批处理文件执行发送到建立的快捷方式,转换的代码存于剪贴板。
③、Hotkey for FormatCpp:clip → clip
step1: 在桌面或开始菜单中建立指向 FormatCpp.cmd 的快捷方式,并设定热键(重启explorer生效或在桌面按住F5键十秒种生效)或由 hoekey 等软件代劳。
step2: 然后拷贝欲格式化代码,按下热键就ok了。
Code of FormatCpp.bat
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: FormatCpp.bat -- Cpp代码格式化 :: 用法:FormatCpp [/i 输入文件] [/o 输出文件] [/h 显示帮助] :: 支持文件: winclip.exe astyle.exe :: 系统:xp :: 作者:pz :: 版本:v1.0 - 格式化风格为 ansi :: 日期:2010年12月5日 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off setlocal set path=%path%;%cd%;%~dp0
set error=
rem 文件完整性检查。 for %%i in (winclip.exe astyle.exe) 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 |astyle.exe --style=ansi --pad=oper | winclip -c echo 格式化完成。clip → clip。按任意键查看结果... pause>nul winclip -p | more pause goto end )
rem 一个参数_只有一个参数时尝试作为输入文件处理,当其不存在时作选项开关处理。 if "%~2" == "" ( if exist "%~1" ( astyle.exe --style=ansi --pad=oper < "%~1" |winclip -c goto end ) )
set input= set out=
rem 解析参数表。 :ParseLoop if "%~1" == "" goto Start if "%~1" == "/?" goto SwitchH rem 转到相应标签进行参数处理 for %%s in (i I 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
:Next2Arg shift :NextArg shift goto ParseLoop
rem 开始格式化
:Start
if defined input ( if defined out ( rem file→file astyle.exe --style=ansi --pad=oper < "%input%" > "%out%" ) else ( rem file→clip astyle.exe --style=ansi --pad=oper < "%input%" | winclip -c ) ) else ( if defined out ( if defined error goto error rem clip→file winclip -p |astyle.exe --style=ansi --pad=oper > "%out%" ) else ( if defined error goto error rem clip→clip winclip -p |astyle.exe --style=ansi --pad=oper | winclip -c ) )
goto end
rem 错误和帮助信息
:error echo.%error% echo.
:SwitchH echo.Cpp代码格式化 echo.FormatCpp [/i 输入文件] [/o 输出文件] [h 显示帮助] echo. echo. /i 指定转换的文件,可包含路径,缺省从剪贴板获得。 echo. /o 指定输出的文件,可包含路径,缺省输出到剪贴板。 echo. /h 显示本简短帮助,等价命令 /?。 echo. 本程序执行依赖以下文件 winclip.exe astyle.exe echo. pause>nul :end
|
效果:
格式化前
enum{ A =1; B=2; };
main() { BYTE i; lcd_init(); // 原本:2句同行
delay(10);
while(1) { //原本:有多余空格;{ 在while同一行
// 原本:注释没有和下一句对齐 lcd_wcmd(0x06);
lcd_pos(0); for(i=0; dis1[ i ] != '\0'; i++) // 原本:[]中有多余空格
{ lcd_wdat(dis1[ i ]); delay(30); }
|
格式化后:
enum { A = 1; B = 2; };
main() { BYTE i; lcd_init(); // 原本:2句同行
delay(10);
while (1) { //原本:有多余空格;{ 在while同一行
// 原本:注释没有和下一句对齐 lcd_wcmd(0x06);
lcd_pos(0); for (i = 0; dis1[ i ] != '\0'; i++) // 原本:[]中有多余空格
{ lcd_wdat(dis1[ i ]); delay(30); }
|
参考:
①批处理代码发帖着色脚本 Batch2ubb(CMD & GAWK)
② 代码格式化 Artistic Style
附件:
相关工具
FormatCpp的主要功能是由 astyle.exe完成的,剪贴板操作依赖于 winclip.exe。
所需执行文件下载链接:
winclip
astyle
说明:
对于版本 Artistic Style 2.01,FormatCpp.bat 代码需要作以下修改:
--pad=oper
→
--pad-oper
原因:FormatCpp.bat 使用的ArtisticStyle版本为 xxxx,和 2.01 的选项格式有点区别。
其它:
可视化版本(office风格)[
]
CoolFormat源代码格式化工具
JS版
阅读(2647) | 评论(0) | 转发(0) |