一个 Windows 命令行别名工具,通过配置文件管理命令别名、环境变量和输出格式。
🚀 开发缘由
- 在 Windows 操作系统中,为 .exe 文件创建软链接(symbolic link)时,常常会因找不到所需的 .dll 文件而失败。而 Linux 和 macOS 则不存在此问题。
- PATH 环境变量太长,且需要反复修改很麻烦。
✨ 解决的问题
- 参数固化:将常用命令与其固定参数直接集成,无需每次手动输入。
- 简化 PATH:大幅缩短 PATH 环境变量长度;重装系统后只需添加一个路径即可使用所有工具。
- 版本管理:当命令行工具更新版本时,无需手动修改每个引用路径中的版本号。
- Linux 风格支持:支持类似 Linux 的 alias 配置格式,便于兼容 WSL 的 shell 环境。
- IDE 兼容性:部分 IDE 不支持通过 doskey 设置的命令别名或批处理脚本(.bat),但支持直接填写 .exe 路径。
- 增强功能:为 ping 等命令自动添加时动态间戳,便于日志追踪。
- 编码兼容:处理部分跨平台命令行工具在非英文输出时出现的乱码问题。
- 别名管理:通过配置文件定义命令别名,简化常用命令。配置文件符合 linux alias 命令格式。
- 环境变量设置:为每个别名配置专属环境变量
- 通配符支持:支持通配符路径自动解析(
C:\Tool*\app*.exe) - 高性能缓存:使用 SQLite 缓存已解析的路径,大幅提升性能
- 输出前缀:支持自定义输出前缀,包括动态时间戳格式。支持参数匹配(macOS 可以使用
[command] |xlibprefix "%T %F ") - 字符集转换:支持命令输出的字符集转换(如 UTF-8 转 GBK)。支持参数匹配
- Exec 模式:支持进程替换模式,可选择立即退出或延迟退出
- 软链接支持:自动为别名创建软链接,便于直接调用
- 递归保护:检测并防止别名无限递归调用
-
项目依赖:
-
构建项目:直接执行 build.cmd 即可。
构建完成后,可执行文件将位于 bin/publish/ 目录下。
- 将
alias.exe复制到系统的 PATH 环境变量中的任意目录 - 确保该目录有写入权限(用于创建软链接)
配置文件位于 %USERPROFILE%\.alias,首次运行时会自动创建。
# 运行 alias.exe 创建配置文件并打开
alias -e编辑配置文件,添加别名定义:
# 使用通配符(自动匹配最新版本)
alias java='"C:\Program Files\java*\bin\java.exe"'
# 关闭颜色,解决 diff 乱码
GIT_CONFIG_PARAMETERS="'color.diff=never'"
CHARSET_CONV='/diff/ && "UTF-8,GBK"'
alias git='"D:\Tools\MinGit-*-busybox-*-bit\cmd\git.exe"'
# 带参数的别名
alias node='"C:\Program Files\nodejs\node.exe" --use-openssl-ca'
# ping 时增加时间戳前缀和进程id
PREFIX='/[^\.]\.[^\.]/ && "PING: %F %T %N %PID "'
alias ping=ping.exe
# 设置环境变量,5 秒后退出 alias 进程保留 idea 进程
JAVA_HOME="C:\Program Files\java\jdk-17"
# EXEC 与 PREFIX 和 CHARSET_CONV 互斥
EXEC=5
alias idea='D:\ideaIC-20*.win\bin\idea.bat'# 通过 alias 调用,将会建立目标软连接。
alias git clone https://github.com/binave/alias.git
# 直接使用别名
git clone https://github.com/binave/alias.git配置文件使用类 Linux shell 语法定义别名:
# 临时别名定义,实际上是调用了 doskey,仅在当前会话有效。
alias <name>='<command>'
# 全局环境变量(对所有之后的别名生效)
export VAR1=1
# 临时环境变量(仅对下一个别名生效)
VAR=value
alias name='command'
# 前缀配置(带条件判断)
PREFIX='/\-t / && "# %F %T "' # 仅当参数包含 -t 时添加时间戳前缀
alias name='command -t arg1'
PREFIX='# %F %T %N ' # 所有输出都添加前缀
alias name='command'
# 字符集转换,仅当参数包含 diff 时将 UTF-8 输出转换为 GBK
CHARSET_CONV='/diff/ && "UTF-8,GBK"'
alias name='command diff'
# Exec 模式
EXEC=true # 立即退出父进程,保留子进程
alias name='command'
EXEC=5 # 5 秒后退出父进程,保留子进程
alias name='command'
# 排除参数通配符处理
EXCL_ARG=1,2 # 第1、2个参数不进行通配符解析
alias name='command arg*1 arg*2'前缀支持以下占位符(类似 Linux date 命令格式):
| 占位符 | 说明 | 示例 |
|---|---|---|
%PID |
目标进程ID | 12345 |
%F |
完整日期 | 2026-01-01 |
%T |
完整时间 | 12:30:45 |
%Y |
年份(4位) | 2026 |
%y |
年份(2位) | 26 |
%m |
月份 | 01 |
%d |
日 | 02 |
%H |
小时(24小时制) | 15 |
%I |
小时(12小时制) | 03 |
%M |
分钟 | 30 |
%S |
秒 | 45 |
%N |
毫秒 | 123 |
%n |
换行符 | |
%t |
制表符 | |
%% |
百分号 | % |
# 显示帮助信息
alias -h
alias --help
alias /?
# 打印缓存内容(显示已解析的路径)
alias
alias -p
alias -p -t # 显示更新时间
# 刷新缓存(删除并重建)
alias -r # 需要管理员权限或开发者模式
# 编辑配置文件
alias -e # 使用 ALIAS_EDITOR 环境变量指定的编辑器,默认为 notepad.exe
# 定义临时别名(透传给 doskey.exe)
alias name='command $*'
# 调用指定别名
alias <name> [args...]| 变量名 | 说明 | 默认值 |
|---|---|---|
ALIAS_EDITOR |
配置文件编辑器路径 | notepad.exe |
ALIAS_MAX_DEPTH |
最大递归深度(防止无限递归) | 9 |
- sqlite - 嵌入式数据库
- SQLitePCL.raw - SQLite Native 绑定
本项目采用 Apache License 2.0 许可证。详见 LICENSE 文件。
本项目从 Scoop/shim 早期版本分叉而来,已经过全面重构,其结构和功能与源项目相比已存在显著差异。