# alias
**Repository Path**: binave/alias
## Basic Information
- **Project Name**: alias
- **Description**: alias for windows
- **Primary Language**: C#
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-01-08
- **Last Updated**: 2026-01-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: alias, Windows, cmd
## README
# Alias for Windows
一个 Windows 命令行别名工具,通过配置文件管理命令别名、环境变量和输出格式。
🚀 开发缘由
- 在 Windows 操作系统中,为 .exe 文件创建软链接(symbolic link)时,常常会因找不到所需的 .dll 文件而失败。而 Linux 和 macOS 则不存在此问题。
✨ 解决的问题
- **参数固化**:将常用命令与其固定参数直接集成,无需每次手动输入。
- **简化 PATH**:大幅缩短 PATH 环境变量长度;重装系统后只需添加一个路径即可使用所有工具。
- **版本管理**:当命令行工具更新版本时,无需手动修改每个引用路径中的版本号。
- **Linux 风格支持**:支持类似 Linux 的 alias 配置格式,便于兼容 WSL 的 shell 环境。
- **IDE 兼容性**:部分 IDE 不支持通过 doskey 设置的命令别名或批处理脚本(.bat),但支持直接填写 .exe 路径。
- **增强功能**:为 ping 等命令自动添加时动态间戳,便于日志追踪。
- **编码兼容**:处理部分跨平台命令行工具在非英文输出时出现的乱码问题。
[](LICENSE)
## 功能特性
- **别名管理**:通过配置文件定义命令别名,简化常用命令。配置文件符合 linux alias 命令格式。
- **环境变量设置**:为每个别名配置专属环境变量
- **通配符支持**:支持通配符路径自动解析(`C:\Tool*\app*.exe`)
- **高性能缓存**:使用 SQLite 缓存已解析的路径,大幅提升性能
- **输出前缀**:支持自定义输出前缀,包括动态时间戳格式。支持参数匹配
- **字符集转换**:支持命令输出的字符集转换(如 UTF-8 转 GBK)。支持参数匹配
- **Exec 模式**:支持进程替换模式,可选择立即退出或延迟退出
- **软链接支持**:自动为别名创建软链接,便于直接调用
- **递归保护**:检测并防止别名无限递归调用
## 安装
### 从源码构建
- 项目依赖:
* dotnet sdk 8+
* Visual Studio 2022 build tools
* 可以使用 [xlib.cmd](https://github.com/binave/xcmd/blob/develop/xlib.cmd) vsi core -i 自动安装没有 IDE 的 Visual Studio 2022。
或者修改 [build.cmd](build.cmd) 中 `VC_VARS_PATH` 的值为 vs2002 安装目录。
- 构建项目:直接执行 build.cmd 即可。
构建完成后,可执行文件将位于 `bin/publish/` 目录下。
### 手动安装
1. 将 `alias.exe` 复制到系统的 PATH 环境变量中的任意目录
2. 确保该目录有写入权限(用于创建软链接)
## 快速开始
### 1. 创建配置文件
配置文件位于 `%USERPROFILE%\.alias`,首次运行时会自动创建。
```bash
# 运行 alias.exe 创建配置文件并打开
alias.exe -e
```
### 2. 配置别名
编辑配置文件,添加别名定义:
```bash
# 使用通配符(自动匹配最新版本)
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'
```
### 3. 使用别名
```bash
# 通过 alias.exe 调用,将会建立目标软连接。
alias.exe git clone https://github.com/binave/alias.git
# 直接使用别名
git clone https://github.com/binave/alias.git
```
## 配置说明
配置文件使用类 Linux shell 语法定义别名:
```bash
# 临时别名定义,实际上是调用了 doskey,仅在当前会话有效。
alias =''
# 全局环境变量(对所有之后的别名生效)
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` | 制表符 | |
| `%%` | 百分号 | % |
## 命令行选项
```bash
# 显示帮助信息
alias.exe -h
alias.exe --help
alias.exe /?
# 打印缓存内容(显示已解析的路径)
alias.exe
alias.exe -p
alias.exe -p -t # 显示更新时间
# 刷新缓存(删除并重建)
alias.exe -r # 需要管理员权限或开发者模式
# 编辑配置文件
alias.exe -e # 使用 ALIAS_EDITOR 环境变量指定的编辑器,默认为 notepad.exe
# 定义临时别名(透传给 doskey.exe)
alias.exe name='command $*'
# 调用指定别名
alias.exe [args...]
```
## 环境变量
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| `ALIAS_EDITOR` | 配置文件编辑器路径 | notepad.exe |
| `ALIAS_MAX_DEPTH` | 最大递归深度(防止无限递归) | 9 |
## 依赖
- [sqlite](https://sqlite.org) - 嵌入式数据库
- [SQLitePCL.raw](https://github.com/ericsink/SQLitePCL.raw) - SQLite Native 绑定
## 许可证
本项目采用 Apache License 2.0 许可证。详见 [LICENSE](LICENSE) 文件。
## 致谢
本项目从 [Scoop/shim](https://github.com/ScoopInstaller/Shim/blob/b0bdac7f4f72dce44e4af1c774243905b5548e1d/src/shim.cs) 早期版本分叉而来,已经过全面重构,其结构和功能与源项目相比已存在显著差异。