以下是 PowerShell、CMD、Bash 的对比解析,帮助你理解它们的定位和差异:
1. 基本定义
工具 |
平台 |
定位 |
CMD |
Windows |
Windows 传统命令行工具,基于 DOS 系统,主要用于基础文件操作和批处理。 |
PowerShell |
Windows(跨平台) |
微软开发的现代化命令行工具,支持面向对象和脚本自动化,集成 .NET 框架。 |
Bash |
Linux/macOS(跨平台) |
Unix/Linux 系统的默认 Shell,支持高级脚本编程和管道操作,常用于开发运维。 |
2. 核心区别
(1) 语法与功能
特性 |
CMD |
PowerShell |
Bash |
命令类型 |
简单文本命令(如 dir ) |
面向对象命令(如 Get-ChildItem ) |
文本命令(如 ls ) |
脚本语言 |
批处理脚本(.bat/.cmd) |
PowerShell 脚本(.ps1) |
Bash 脚本(.sh) |
管道传递内容 |
文本流 |
对象(含属性和方法) |
文本流 |
跨平台支持 |
仅 Windows |
Windows、Linux、macOS |
Linux、macOS、Windows(WSL/Cygwin) |
(2) 典型操作对比
操作 |
CMD 命令 |
PowerShell 命令 |
Bash 命令 |
列出文件 |
dir |
Get-ChildItem 或 ls |
ls |
查找文件内容 |
findstr "text" file |
Select-String "text" file |
grep "text" file |
变量赋值 |
set var=value |
$var = "value" |
var="value" |
循环遍历文件 |
for %f in (*.txt) |
Get-ChildItem *.txt | ForEach-Object { ... } |
for f in *.txt; do ... |
3. 使用场景
适合 CMD 的情况
- 运行遗留的
.bat
脚本。
- 快速执行简单文件操作(如复制、删除)。
适合 PowerShell 的情况
- 系统管理(如批量修改注册表、管理 Windows 服务)。
- 调用 .NET 库或 COM 对象。
- 处理结构化数据(如 JSON、CSV)。
适合 Bash 的情况
- Linux/macOS 开发环境操作。
- 编写跨平台脚本(搭配 WSL 在 Windows 使用)。
- 使用 Unix 工具链(如
grep
、sed
、awk
)。
4. 跨平台协作示例
假设你需要在 Windows + WSL 环境下部署 Hexo 博客:
- Windows PowerShell 中安装 Node.js:
choco install nvm
nvm install 16
- WSL Bash 中配置 Hexo:
npm install -g hexo-cli
hexo init blog && cd blog
- CMD 中快速启动本地服务器(备用):
hexo server
5. 安全性对比
工具 |
风险点 |
防护机制 |
CMD |
简单脚本易被恶意代码利用 |
依赖用户权限控制 |
PowerShell |
强大的系统访问能力 |
执行策略(如 Restricted 、RemoteSigned ) |
Bash |
脚本注入风险 |
文件权限管理(chmod )和沙盒环境 |
总结
- CMD:Windows 传统工具,适合简单操作,逐渐被淘汰。
- PowerShell:现代化、面向对象,适合系统管理和复杂任务。
- Bash:Unix/Linux 生态核心,开发运维首选。
根据你的需求选择工具:
- 开发/跨平台 → Bash(WSL 或 Git Bash)。
- Windows 系统管理 → PowerShell。
- 快速执行旧脚本 → CMD。