电脑小白也能看懂的cmd和powershell讲解
认识windows的两个命令行工具 CMD命令提示符和PowerShell
都可以用于人机交互并提供一个用于自动化IT的提示工具,pws扩展cmd shell的功能(微软发明了一种叫ALIAS别名的机制比如CMD的cd功能和pws的Get-Location一样,可以在powershell中输入Get-Alias命令查看所有的别名关系,这其中也吸纳了一些linux命令),可以运行称为cmdlet的pws命令,可以在pws中运行windows命令和pws专属的cmdlet命令,但是cmd shell只允许运行windows命令
cmdlet是啥
cmdlet = PowerShell 里的“小命令”
- 先分清楚 3 个东西
你现在只要记住这个区别就行:
- cmd 里的叫:命令
- dir、cd、copy、del…
- 老系统里的小指令
- Linux 里的叫:程序/命令
- ls、cd、cp、rm…
- PowerShell 里的叫:cmdlet(命令小部件)
- 这就是你问的东西
-
cmdlet 长啥样?
格式固定:
动词-名词
比如:
- Get-ChildItem (获取文件列表 = dir / ls)
- Set-Location (设置位置 = cd)
- New-Item (新建文件/文件夹)
- Remove-Item (删除 = del / rm)
- Copy-Item (复制 = copy / cp)
-
为什么要有 cmdlet?
因为 PowerShell 是现代、正规、系统化的 Shell:
- 所有命令格式统一
- 好记、好查、好自动补全
- 功能比 cmd 强得多
但——
你不用背全名!
PowerShell 做了别名,你可以直接敲:
- ls
- dir
- cd
- mkdir
- rm
- cp
- mv
它内部会自动翻译成对应的 cmdlet。
4.超级精简总结
- cmdlet = PowerShell 的官方命令
- 格式:动词-名词
- 但你不用记全名,直接用 ls / cd / mkdir / rm 就行
- 它和 cmd、Linux 命令功能一样,只是名字更规范
内置命令和批处理文件是什么
内置命令:CMD自己自带,不用找别的文件就能直接用的命令
外部命令:不是自带,本质是一个.exe可执行文件 eg:ping,ipconfig,format 用的时候再查
批处理(batch)文件:把一堆CMD命令写在一个文本文件里,后缀改成.bat,双击就能自动全部执行
即把命令打包成一个一键脚本
pws和cmd的区别
cmd:纯文本命令解释器
pws:面向对象的脚本环境+命令行
功能差距(核心区别)
CMD 能做的:
-
基础文件操作: dir / cd / copy / del / mkdir
-
运行简单 .bat 批处理脚本
-
调用外部 exe(如 ping / ipconfig )
-
几乎不支持变量、循环、逻辑判断
-
通常返回纯文本的输出
PowerShell 能做的:
-
上面 CMD 所有功能(完全兼容)
-
管理 Windows 全系统:服务、进程、注册表、用户、权限
-
写复杂脚本 .ps1 ,支持变量、循环、条件判断、函数
-
面向对象:命令输出是“对象”,可以筛选、排序、管道传递
-
强大的自动补全(Tab 键)、模块扩展
-
直接和 .NET / C# 交互,能做编程级自动化
-
返回的是.NET对象,允许更复杂和精确的数据操作
脚本文件格式
-
CMD: .bat / .cmd 批处理文件
-
PowerShell: .ps1 脚本文件
-
.ps1 功能远强于 .bat ,但 PowerShell 默认有执行策略,会阻止陌生脚本运行(你之前看到的 npm 报错就是这个原因)
powershell基础命令
| 任务 | powershell命令 | 对应linux bash命令 | 作用 |
|---|---|---|---|
| 看当前目录 | pwd | pwd | print working directory(目录) |
| 列出文件 | ls/dir/Get-ChildItem | ls | List,看这个文件夹里有啥 |
| 进入目录 | cd 文件夹名 | cd 文件夹名 | Change Directory 换个地方 |
| 回到上级 | cd … | cd … | 回到上一层文件夹 |
| 创建文件夹 | mkdir 文件夹名 /New-Item-ItemTypeDirectory-Name … | mkdir 文件夹名 | Make Directory |
| 创建文件 | New-Item 文件名.txt | touch 文件名.txt | 新建一个空文件 |
| 查看文件内容 | cat 文件名.txt/Get-Content | cat 文件名.txt | 看文件里写了啥 |
| 删除文件 | Remove-Item 文件名.txt/del | rm 文件名.txt | Delete |
| 复制文件 | Copy-Item 源 目标/copy | cp 源 目标 | Copy |
| 移动/重命名 | Move-Item 源 目标/move | mv 源 目标 | Move/Rename |
CMD 最核心 10 个命令:
-
dir 看文件
-
cd 进文件夹
-
cd … 退回去
-
mkdir 新建文件夹
-
echo … > 文件 新建文件
-
type 看内容
-
copy 复制
-
move 改名/移动
-
del 删除
-
cls 清屏
2.管道符 |
可以连接多个命令,把左边命令的输出丢给右边命令当输入,在 PowerShell 中,管道符 | 前后加不加空格都可以运行
接下来给几个命令
eg1:想获取5个CPU占用率最高的进程
Get-Process|Sort-Object CPU -Descending|Select-Object -First 5
获取进程|排序+排序依据(CPU占用时间)|筛选前五个
eg2:计算windows目录下面所有exe可执行文件的大小
Get-ChildItem $env:windir -Filter *.exe|Measure-Object -Sum Length
$env:windir指定要搜索的目录为 Windows 目录。-Filter *.exe筛选出所有扩展名为.exe的文件。| Measure-Object -Sum Length通过管道将文件对象传递给Measure-Object,计算其Length属性(文件大小)的总和。
PS:由于主播犯了两个错误,这里说一下
- 这个美元符号需要在英文输入法模式下输入
- $env:windir之间不能加空格,
什么是 $env:windir?
你可以把 Windows 系统想象成一个大型的文件柜,里面有很多重要的文件夹。其中一个最重要的文件夹叫 Windows,它通常位于 C:\Windows。
为了方便系统(和用户)快速找到这个文件夹,Windows 在启动时就会记下这个路径,并给它起了一个名字,这个名字就叫 环境变量。windir 就是专门用来存储 Windows 目录路径 的那个环境变量的名字。
在 PowerShell 中,要使用某个环境变量的值,就需要写成 $env:变量名。
$符号在 PowerShell 里表示“我是一个变量”。env是 environment(环境)的缩写,表示“我要去环境变量那个抽屉里找”。:是分隔符,用来把env和具体的变量名(windir)分开。windir就是那个变量本身的名字。
所以,$env:windir 合在一起,就是告诉 PowerShell:“请把环境变量 windir 里存的那个路径拿出来给我用。” 通常情况下,它拿到的就是 C:\Windows。
为什么要用 $env:windir,而不是直接写 C:\Windows?
因为不是所有电脑的 Windows 都装在 C:\Windows!有些电脑可能装在 D 盘,或者有多个系统。如果直接写死 C:\Windows,万一某个用户电脑的 Windows 在 D 盘,命令就会出错。
而使用 $env:windir,PowerShell 会自动去读取系统记录的正确路径,无论 Windows 装在哪里,都能准确找到。这就像你告诉朋友“去我家”和告诉他具体地址的区别——$env:windir 就是“我家”,不管我搬到哪里,它永远指向我现在的家。
放在整个命令里是什么意思?
现在看eg2的完整命令:
powershell
Get-ChildItem $env:windir -Filter *.exe | Measure-Object -Sum Length
我们一步步拆解:
Get-ChildItem:这是一个命令,意思是“列出文件夹里的所有东西”。$env:windir:告诉Get-ChildItem去哪个文件夹里列东西 —— 就是 Windows 目录。-Filter \*.exe:加上一个筛选条件,只列出那些扩展名为.exe的文件(也就是可执行程序)。|:管道符,意思是把前面列出来的所有文件,传递给下一个命令处理。Measure-Object -Sum Length:这个命令负责计算。它会对传过来的每一个文件,读取它的Length属性(也就是文件大小),然后把所有文件的大小加起来(-Sum),最后显示总和。
所以整句话就是:“到 Windows 文件夹里,把所有 .exe 文件找出来,然后算出它们一共占了多少字节。”
总结
-
$env:windir是一个“万能钥匙”,自动指向你电脑上的 Windows 文件夹。 -
以后你在 PowerShell 里看到
$env:XXX,就知道这是在引用某个系统预存的路径或信息(比如$env:TEMP是临时文件夹,$env:USERNAME是当前用户名)。eg3:假设有一个
eg3:假设有一个data.csv文件,里面存储了用户信息
Import-Csv data.csv | Where-Object { $_.Age -gt 30 } | ConvertTo-Html | Out-File output.html
1.Import-Csv data.csv
读取 data.csv 文件。
前提条件:你的 CSV 文件第一行必须是表头(例如:Name,Age,Email),否则 $_ .Age 会找不到列。
2.Where-Object
筛选对象
3.{ $_.Age -gt 30 }
筛选条件
$_ 代表当前行的数据。
.Age 取这一行的 “Age” 列的值。
-gt 是 “Greater Than”(大于)的意思。
注意:这里要求 CSV 里的 Age 列必须是数字。如果 CSV 里存的是 “三十” 或者 “30岁”(带文字),这行代码会报错或筛选失败。
4.ConvertTo-Html
把筛选出来的结果转换成 HTML 表格格式。
5.Out-File output.html
把生成的 HTML 内容保存为 output.html 文件。
💡 可能遇到的“坑” (如果运行没结果或报错)
虽然语法没错,但如果运行后没反应,请检查以下两点:
CSV 表头名称:
打开 data.csv,看第一行是不是真的写着 Age?
- 如果是 年龄,代码就要改成 $_.年龄 -gt 30。
- 如果是 age (小写),PowerShell 通常不区分大小写,所以没问题,但最好保持一致。
- 如果有空格,比如 Age (后面有个空格),那就必须写成 $_. 'Age ’ 。
数据类型:
确保 Age 列里全是纯数字(如 31, 25),不要包含单位(如 31岁)。
CSV 文件(Comma-Separated Values)其实就是一种纯文本格式的表格。
你可以把它想象成 Excel 表格的“简化版”或“通用版”:
长什么样:它没有复杂的颜色、边框或公式,里面只有文字和数字。
怎么分隔:每一列的数据之间用逗号(,)隔开,每一行数据用换行隔开。
为什么用第一行做表头:就像你提到的 Name,Age,Email,第一行是用来告诉电脑“这一列叫什么名字”。如果没有这一行,电脑就不知道哪一列是“年龄”,哪一列是“姓名”,代码里的 $_ .Age 就会因为找不到叫“Age”的列而报错。
举个简单的例子:
假如你有一个 Excel 表格:
表格
姓名 年龄 邮箱
张三 25 mailto:zhangsan@example.com
李四 30 mailto:lisi@example.com
把它保存为 data.csv 后,用记事本打开,它看起来是这样的:
text
编辑
姓名,年龄,邮箱
张三,25,zhangsan@example.com
李四,30,lisi@example.com
第一行 姓名,年龄,邮箱 就是表头。
后面的每一行代表一个人。
中间的逗号 , 就是用来区分不同列的。
由于我们这个例子是基于假设,实践步骤如下
你需要自己新建一个 CSV 文件,并且把它放在正确的位置。别担心,不需要安装任何软件,用电脑自带的记事本就能做。
新建文件并填入内容
-
我们需要分两步走:先新建一个文件,再用记事本打开它。
请按照这个最简单的步骤操作(以在桌面操作为例):
第一步:新建一个文本文件
-
回到电脑桌面(或者你想存放文件的任意文件夹内)。
-
在空白处点击鼠标右键。
-
在菜单里找到
“新建” -> 点击 “文本文档”。
- 这时候你会看到一个叫
新建文本文档.txt的文件出现了。
- 这时候你会看到一个叫
第二步:重命名为 CSV
-
选中这个新文件,按键盘上的 F2 键(或者右键点击它选“重命名”)。
-
把名字改成
data.csv⚠️ 关键点:一定要把后面的
.txt删掉,只保留.csv。💡
如果你看不到
.txt:- 说明你的电脑隐藏了后缀名。
- 解决方法:在文件夹窗口上方点击 “查看” 菜单,勾选 “文件扩展名”。这时候你就能看到
.txt了,把它删掉改成.csv即可。
系统会弹窗警告“更改扩展名可能导致文件不可用”,直接点 “是”。
若出现这种情况,说明命名重复了,可以把文件名改成data22.csv或者其他,任意的以.csv为后缀的就行,💡与此同时要把eg3的代码引用的文件名改掉!!!!!!!!!!!(Import-Csv data.csv就这个)

第三步:用记事本打开它
现在你有了一个叫
data.csv的文件图标(通常图标会变,或者还是记事本图标)。- 右键点击这个
data.csv文件。 - 选择 “打开方式”。
- 在列表里选择 “记事本”。
第四步:填入内容
这时候记事本打开了,里面是空白的。请把下面这段代码复制进去:(这是模拟的用户数据):
-
Name,Age,Email
ZhangSan,25,zhang@example.com
LiSi,35,li@example.com
WangWu,28,wang@example.com
ZhaoLiu,40,zhao@example.com
SunQi,22,sun@example.com
点击记事本左上角的 “文件” -> “保存”,然后关闭记事本。
解释一下刚才的内容:
- 第一行
Name,Age,Email就是表头(告诉电脑哪列是年龄)。- 后面几行是具体的人,其中 LiSi (35岁) 和 ZhaoLiu (40岁) 的年龄大于 30,待会儿代码运行后,应该只会把这两个人生成到 HTML 里。
把 PowerShell 切换到这个位置
这是新手最容易卡住的地方!代码必须知道文件在哪。
由于我的电脑有WPS,因为 WPS 把自己设为了默认打开方式,但是这不影响代码运行,方法一实践失败了,建议使用方法二,感兴趣的小伙伴可以试试一
**方法一:**找到刚才保存 data.csv 的那个文件夹(比如它在桌面上)。
在这个文件夹的空白处,按住键盘上的 Shift 键不放,同时点击鼠标右键。
在弹出的菜单里,选择 “在此处打开 PowerShell 窗口” (或者 “在终端中打开”)。
这时候会弹出一个黑底或蓝底的窗口,路径应该已经自动指向了这个文件夹。
方法二:
第 1 步:确认文件位置
打开你存放 data.csv 的那个文件夹。(找不到的可以用everything)
点击文件夹顶部的地址栏(就是显示路径的地方,比如 C:\Users\你的名字\Desktop)。
点击后,里面的文字会变成蓝色选中状态。
按键盘 Ctrl + C 复制这个路径。
第 2 步:打开 PowerShell
按键盘上的 Win 键(微软图标那个键),直接输入 powershell。
在搜索结果中点击 “Windows PowerShell” 打开它(会出现一个蓝底或黑底的窗口)。
第 3 步:切换到文件夹
在 PowerShell 窗口里,输入 cd (注意 cd 后面有个空格)+刚才复制的路径
此时命令行看起来应该是这样的:cd C:\Users…\Desktop
💡或者其他,比如主播桌面设置在了D盘,路径就直接是D:\
按 回车键 (Enter)。
✅ 怎么知道成功了?
看 PowerShell 窗口里的路径变了,变成了你刚才复制的那个文件夹路径。
第 4 步:验证文件是否存在(重要!)
在 PowerShell 里输入以下命令并回车:
dir
(这是列出当前文件夹所有文件的命令)

如果你看到了 data.csv:太棒了!直接进行下一步。
如果你看到的是 data.csv.txt 或者 data.csv 但图标是 WPS:
只要名字是 data.csv 就可以,图标是 WPS 没关系。
如果名字是 data.csv.txt,说明你没改成功后缀名。请输入 ren data.csv.txt data.csv 来重命名。
运行代码
确认文件在列表里后,直接输入eg3那行代码

回到那个文件夹,你会发现多了一个叫 output.html 的文件。
双击打开它(会用浏览器打开)。

你应该能看到一个表格,里面只有 LiSi 和 ZhaoLiu 这两个人的信息(因为只有他们年龄大于 30)。

3.脚本编程
CMD和power shell都可以编写脚本编程语言,扩展名分别是.bat .ps1
区别是.bat文件非常老旧,甚至不支持if嵌套

powershell更像一个现代版的编程语言,可以使用()和嵌套if来表示代码层级

cmdlet补充
1.Get-Command命令:可以用来获取所有pws支持的命令
2.Update-Help:用来更新帮助文档
3.Get-Help +一个命令类型 :可以查看单个命令的帮助文档
eg:Get-Help Get-Command
下面几个和Linux完全相同
4.pwd:输出当前的工作目录 是Get-Location的别名
5.ls:列出当前目录的文件
6.clear:用来清屏
7.cat:查看某个文件的内容
8.mkdir:新建一个文件夹
9.mv:移动文件
10.cp:复制文件
11.rm:删除文件
输出命令
12.ps | export -csv -Path test.csv
显示当前所有进程|把某些数据输出到csv格式,回车一下就把所有进程输出到csv里面了
13.ps | convertto-html > test.html
输出html格式的网页可以使用浏览器打开
这里详细例子大家可以上网搜一下,我就不演示了
💡这些常用别名涉及到命令参数的一定要仔细看帮助文档
下面这是个例子,简单讲解一下

一、先拆解这条命令的含义
cp .\测试2\powershell.ps1 ./
- cp :在 PowerShell 里是 Copy-Item 的别名,作用是复制文件/文件夹。
- .\测试2\powershell.ps1 :源文件路径
- . 代表「当前目录」(你现在所在的 C:\Users\93917\Desktop\测试 )
- .\测试2\ 代表「当前目录下的「测试2」子文件夹」
- 合起来就是:当前目录 → 进入「测试2」文件夹 → 找到 powershell.ps1 文件
- ./ :目标路径
- ./ 同样代表「当前目录」(也就是你现在的 测试 文件夹)
- 作用是:把刚才找到的源文件,复制到当前目录
二、为什么要这么写?
- 相对路径的规范写法
- 用 . 开头明确告诉 PowerShell:「我要从当前所在文件夹开始找文件」,避免和系统内置命令/其他路径混淆。
- 如果直接写 测试2\powershell.ps1 也能运行,但 . 是更严谨、更通用的写法(Linux/macOS 也遵循这套规则)。
- 场景还原
他的文件夹结构大概是这样:
plaintext
测试/
├─ 测试2/
│ └─ powershell.ps1 ← 要复制的源文件
└─ ./ ← 复制到这里(当前的「测试」文件夹)
这条命令就是把「测试2」里的脚本,复制一份到外层的「测试」文件夹。
三、等价写法对比
写法 说明
cp .\测试2\powershell.ps1 ./ 最清晰的相对路径写法 ✅
cp .\测试2\powershell.ps1 . 末尾的 / 可省略,效果一样
cp 测试2\powershell.ps1 . 省略开头的 . ,也能运行,但不够严谨
Copy-Item .\测试2\powershell.ps1 -Destination ./ 完整的 PowerShell 原生命令写法
四、小提醒
- 在 PowerShell 里, cp 、 ls 、 rm 其实都是别名,分别对应 Copy-Item 、 Get-ChildItem 、 Remove-Item ,是为了让习惯 Linux 的用户更快上手。
- 如果你想更“正宗”的 PowerShell 写法,可以用完整命令名,可读性更强。
更多推荐



所有评论(0)