Skycoop

第一个批处理-convert.bat

2018-07-19
skycoop

convert.bat 是一个辅助 Jekyll 生成markdown的脚本。众所周知,一篇博客要能被Jekyll解析,需要命名为规范的名字,文件头有YAML头标签,以及必须放在_post目录下。

个人平时编写的markdown文件,希望保留文件名自定义,存放位置无要求,不引入Yaml头标签,一键转换markdown文件到_post,转换完成打开_post目录,方便自己发布,同时维护每个生成的Yaml头文件信息。

convert.bat 可以帮助解决我的需求。

使用说明

CMD命令行里执行 convert.bat PATH 或者 call convert.bat PATH 或者start convert.bat PATH

与常见的BAT脚本一样调用并传入文件的路径。仅支持单个文件的路径。

最好的调用方式,放到右键菜单里去

打开注册表, WIN + R打开运行框,输入regedit.

\HKEY_CLASSES_ROOT\*\shell 右键新建项jekyll, 在jekyll再新建项command

编辑jekyll数据,这个是右键的显示文本,如下

同理编辑command, 这个是具体执行的命令,如下

"D:\idea_src_工程\skyc00p.github.io\bin\convert.bat" "%1" 

D:\idea_src_工程\skyc00p.github.io\bin\convert.bat 这个是执行脚本的绝对路径, %1是传入的文件的绝对路径

保存退出后,在任意markdown文件右键,选择生成md就会自动执行脚本命令。

发布新文章

现在有markdwon文件,名为New.md, 位于d:\, 里面内容如下

下面的是摘要标记符

<!--more-->

## 标题1 ##

下面这里是正文
Hello World!!!

选择文件右键生成md, 会自动在D:\idea_src_工程\skyc00p.github.io\_drafts\yaml\路径下生成一个与该文件相同名字的yaml文件并打开,让我自己填入该markdown相应的信息。如下所示

可以见到日期自动生成,标题自动获取为源文件的文件名,其他的都是固定的。我只要按需更改就行。如果更改时间要按照我的标准yyyy-MM-dd来,否则会引起未知问题。改好的如下。

保存退出后,会回显Yaml头文件,确认无误后,合并new.yamlnew.md2018-07-19-new.md_post目录下。如下

合并完成后会询问是否打开_post所在目录,以及是否打开文件2018-07-19-new.md,按提示操作即可。

最后任意键退出。在本地预览下。

主页OK

正文内容,目录正常显示

更新已发布的文章

对已生成的文章再次执行命令时,会执行更新,而不会创建新的日期的markdown文件。

脚本会根据当前文件名去搜索对应的yaml头,找到时会验证 yaml 里的date属性是否有填写或者是否规范的日期格式,验证不通过时会提示是否要删除yaml头,以便重新生成。

如果日期存在,会以yyyy-MM-dd-title.md的格式在_post搜索是否有重名的文件,如果有提示是否删除。确保无重名之后,脚本会回显对应的yaml文件内容并提示是否需要修改.

改完之后再次确认合并操作就会将新的markdown文件和新的yaml文件合并为一个yyyy-MM-dd-title.md,放置在_post目录下。

实例:更新new.md的显示名称,日期和内容 etc

打开new.md在最后一行里添加新增内容,成功更新。保存退出后重新执行生成md,提示

因为刚刚执行一遍生成md,所以有重名的文件存在。删或不删,结果可能会一样,如果yaml的时间没改而且最后执行合并的话。这里只是避免误删。

输入y,之后提示

输入y回车确认,在之后的txt中修改显示名称,日期等,保存退出,再确认合并。

在本地预览看看。

主页OK

正文内容OK

再看_post目录下,没有新的文件产生

警告:重命名

已成功运行生成md的文件,修改名字之后再次生成md,无法执行更新,而是会重新创建新的yaml头和创建新的当前日期的markdown文件。因为文件名是唯一的对应关系。

个人配置

更改生成的post目录,修改脚本的_DEST_PATH值,路径最后要带\

更改yaml文件的存放目录,修改脚本的_YAML_PATH值,路径最后要带\

脚本convert.batUTF-8 无BOM格式编码, Windows 换行符CRLF, 不要修改,容易出错,中文乱码。

后话

这是我写的第一个BAT脚本,我希望是我的最后一次。因为这个历史包袱实在是太重了,写的过程痛苦无比,无法愉快的调试,没有足够的文档,同时Windows平台下的基础命令功能比Linux下的弱太多了,最重要的是这个 CMD,BAT 脚本语言本身缺陷就挺严重,没有成熟的生态,基础组件也不够用,语义少,写出来的代码混乱,无法维护。这个只能应付死需求,而且必须最简单的需求,就是输入必须唯一或者流程固定,否则令人头大。反正我在实现上面这个简单需求的时候,没少踩坑,用了不少奇淫巧技。本来还有其他复杂的小需求的,想用脚本来实现的,现在考虑要换别的脚本语言来实现。

本来写完之后,测试OK,想添加下注释或者说明,重新整理函数结构之类的,但是我放弃了,因为控制不了。有时添加下注释都会莫名引入BUG。嗯。我试过,在一行rem注释里末尾的中文?导致脚本运行错误。

这里想想我对脚本语言的需求。

拆箱即用

对系统环境没有太大的需求,最好跨平台,要是系统天生自带支持运行就更完美了。免安装或是安装流程简便,配置简单。轻量,不会像Jre占用几百兆的空间(但这个不强求)

即写即运行

没什么好说的,写脚本本来就是为了处理自动化流程的或是快速写原型的,不想引入复杂的构建编译组件

胶水语言

下可调用写好的c程序来处理底层,上可调用Java,C++来处理复杂需求

完善的API

语言设计符合当前开发潮流, 基础库完善, 能处理文件IO,网络,字符串,日期等常见需求

成熟的生态

有成熟的IDE工具以及其他配套工具,活跃的社区,第三方强大的库,权威的文档,成功的案例

如果下次有机会,尝试用Python 或者 Powershell

为了避免日后的工作,不可避免的再次遇见CMD, 将此次经验总结起来。嗯。又要写篇技术总结。


相关文章

目录