一、基础定位
-
CMD(Command Prompt / 命令提示符)老工具,源自 DOS,1980 年代产物,纯批处理(batch) 解释器,Windows 自带传统终端。
-
PowerShell微软 2006 年后推出的现代 Shell,基于 .NET,面向系统管理、自动化,分两种:
- Windows PowerShell(系统自带,后缀
powershell.exe,Win10/11 内置) - PowerShell Core(跨平台 pwsh.exe,开源,支持 Mac/Linux)
- Windows PowerShell(系统自带,后缀
二、核心差异对照表(开发常用维度)
表格
| 对比项 | CMD 命令提示符 | Windows PowerShell | |
|---|---|---|---|
| 底层处理对象 | 纯文本字符串 | 原生处理 .NET 对象(核心优势) | |
| 管道 ` | ` 作用 | 传递纯文本流,只能字符串截取 | 传递完整对象,可直接取属性、过滤、排序 |
| 过滤关键字命令 | findstr(外部 exe 工具) | Select-String(内置 cmdlet,正则更强) | |
| 循环 / 判断语法 | 简陋 for /if/goto,批处理语法反人类 | 完整编程语言:foreach/if/switch/function | |
| 变量 | %var% 延迟扩展麻烦 | $变量名,类型丰富,支持对象属性 | |
| 路径处理 | 兼容 `` 反斜杠,特殊字符转译繁琐 | 同时支持 / 和 ``,adb、Linux 路径更友好 | |
| adb 命令兼容性 | 完全兼容 adb,但过滤输出麻烦 | adb 命令通用,搭配管道过滤更简洁 | |
| 脚本后缀 | .bat / .cmd | .ps1 功能更强,可写自动化脚本 | |
| 内置命令 | 少量内置,大量依赖外部 exe | 上千条内置 cmdlet(Get-ChildItem、Get-Process 等) | |
| 正则支持 | findstr 简易正则 | 原生完整正则,匹配规则统一 |
三、结合你之前的 adb 命令举例对比
需求:过滤应用 version 版本信息
1)CMD 写法
cmd
adb shell dumpsys package com.cars.adapterservice.china | findstr version
- 原理:把 adb 输出全部文本丢给独立程序
findstr做字符串匹配 - 缺点:正则能力弱,复杂筛选很难实现
2)PowerShell 写法
powershell
adb shell dumpsys package com.cars.adapterservice.china | Select-String "versionName|versionCode"
Select-String原生支持正则|(或),输出带匹配高亮- 进阶玩法(提取纯文本值):
powershell
# 直接提取版本号字符串
$info = adb shell dumpsys package com.cars.adapterservice.china
$info | Select-String 'versionName=(\S+)' | ForEach-Object {$_.Matches.Groups[1].Value}
这种提取捕获分组的操作 CMD 很难实现。
四、日常开发直观区别
1. 管道逻辑最大差距(最容易感知)
- CMD:管道只是文本复制粘贴,你只能切割文字;
- PowerShell:管道传递完整数据对象,像操作程序变量一样处理结果。
举个例子:列出电脑所有 adb 进程并杀掉CMD 很难简洁实现;PowerShell 一行搞定:
powershell
Get-Process adb | Stop-Process -Force
2. 变量写法区别
CMD:
cmd
set pkg=com.volvocars.adapterservice.china
adb shell dumpsys package %pkg%
PowerShell:
powershell
$pkg="com.volvocars.adapterservice.china"
adb shell dumpsys package $pkg
3. 路径斜杠
adb、Android 路径全是 /,PowerShell 直接兼容:
powershell
adb pull /storage/1234-ABCD/Download C:\soft
# 也能写 / 不报错
adb pull /storage/1234-ABCD/Download C:/soft
CMD 仅支持 ``,写 / 容易识别异常。
五、adb 车载开发怎么选?
- 简单临时 adb 指令:CMD、PowerShell 随便用,效果一样;
- 需要过滤日志、提取版本、批量推送 / 拉取文件、写自动化脚本:优先 PowerShell;
- 老旧工具、老批处理脚本:只能用 CMD(.bat)。
六、补充小知识点
- 执行 bat 脚本只能在 CMD,ps1 脚本只能在 PowerShell;
- Win11 终端默认是 PowerShell,也可以手动切换 CMD 标签页;
- 两者都能正常调用 adb、aapt2、java 等外部 exe 程序,命令语法完全通用,区别只在管道、过滤、变量、脚本功能。
七、一句话总结
CMD 是老旧简易文本终端,只能玩字符串;PowerShell 是现代全功能脚本 Shell,能操作数据对象,开发调试 Android / 车机 adb 效率更高。