简要记录如何在Windows操作系统中通过批处理脚本来给复杂的命令添加别名以简化使用。

背景

自己使用Hugo进行博客开发已经有年头了,最近由于需要搭建新的网站1需要使用特定的模板,而该模板对Hugo的版本有要求,故对Hugo版本进行了升级,从v0.100升级到v0.126

升级之后虽然在搭建新网站时没有问题,但个人发现新版本的Hugo有一个特性让人用起来不太方便:

通过hugo server -w -D在本地启动Hugo环境时,默认会在本地public文件夹下生成全部的静态文件,从而导致通过Git提交时会提交大量无用的文件,在国内这种网络环境下容易push失败。

而之前自己使用Hugo时,若要手工生成静态文件需要在参数中显示指定,类似hugo server --renderToDisk,升级后的版本将其作为了默认选项。

进一步查看资料,发现该特性是在v0.123版本中引入的2,具体原因参见3,在该版本之后若想默认不在public目录下生成静态文件则需要在启动时手工添加相关指令,类似hugo server -w -D --renderToMemory

尽管Hugo作者这么做肯定是有其原因的,但我习惯了只有在托管到GitHub Pages时才生成静态文件,同时我也是一个懒人,每次使用时都要添加--renderToMemory参数对我来说简直是一种折磨。

能否仿照Linux中的alias指令对前述命令进行封装,从而简化使用呢?

分析

我们知道在Windows的默认附带了很多指令,如mspaintmstsccalc等指令,可在运行窗口或cmd中输入这些指令直接使用,其原因为这些指令都位于C:\Windows\System32目录下,而该目录是系统目录,在启动时会进行加载。

而对于非Windows系统自带指令或软件,在我们安装过程中通常会提示我们是否要将该软件添加到Path环境变量中去,典型的如Python,当选择添加到Path环境变量中后,可重新打开一个cmd窗口,然后输入python指令进行相关的操作。即我们如果想要在cmd中能直接使用某个自定义指令,则该指令必须添加到Path环境变量中去。

Linux中有bashzsh等脚本可用于封装复杂的指令,同样在Windows中可使用batch脚本来封装复杂的指令,最终问题变为如下:

是否可通过batch脚本封装复杂的Hugo指令,并将该脚本添加到Path环境变量中来实现在cmd中直接使用封装后的指令?

实现

理论分析完毕后,接下来进行实际操作验证:

  1. 新建一个名为hugo_server.bat的脚本,内容如下

    @echo off
    hugo server -w -D --renderToMemory
    
  2. 仿照下图,将hugo_server.bat的位置添加到Path环境变量中去

    将脚本路径添加到环境变量中去

  3. 重新打开一个cmd窗口,输入hugo_server(batch脚本的名称),显示结果如下,可看出hugo_server别名正常工作,目的达到!

    bat脚本别名正常工作