Windows PowerShell 和 CMD(命令提示符)完整区别

5 阅读2分钟

一、基础定位

  1. CMD(Command Prompt / 命令提示符)老工具,源自 DOS,1980 年代产物,纯批处理(batch) 解释器,Windows 自带传统终端。

  2. PowerShell微软 2006 年后推出的现代 Shell,基于 .NET,面向系统管理、自动化,分两种:

    • Windows PowerShell(系统自带,后缀 powershell.exe,Win10/11 内置)
    • PowerShell Core(跨平台 pwsh.exe,开源,支持 Mac/Linux)

二、核心差异对照表(开发常用维度)

表格

对比项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 车载开发怎么选?

  1. 简单临时 adb 指令:CMD、PowerShell 随便用,效果一样;
  2. 需要过滤日志、提取版本、批量推送 / 拉取文件、写自动化脚本:优先 PowerShell;
  3. 老旧工具、老批处理脚本:只能用 CMD(.bat)。

六、补充小知识点

  1. 执行 bat 脚本只能在 CMD,ps1 脚本只能在 PowerShell;
  2. Win11 终端默认是 PowerShell,也可以手动切换 CMD 标签页;
  3. 两者都能正常调用 adb、aapt2、java 等外部 exe 程序,命令语法完全通用,区别只在管道、过滤、变量、脚本功能。

七、一句话总结

CMD 是老旧简易文本终端,只能玩字符串;PowerShell 是现代全功能脚本 Shell,能操作数据对象,开发调试 Android / 车机 adb 效率更高。