1. 二十年了,为什么我还要劝你认真学一遍CMD
先说一个真实场景。前阵子帮朋友处理一台老笔记本,开机慢、C盘飘红、右键菜单卡顿,他准备重装系统。我打开CMD,敲了三行命令:关闭休眠、清理临时文件、禁用几个开机启动项。十分钟后C盘多出十几个G,开机速度肉眼可见地变快。朋友在旁边看着,一脸"这也行?"的表情。
这就是CMD和DOS命令最奇妙的地方:它已经存在了几十年,看起来就是一个黑底白字的窗口,但在很多场景下,效率远超鼠标在图形界面里的反复点击。
很多人觉得CMD是"古董技术",是程序员和运维才需要碰的东西。但实际上,从普通办公用户到开发者,只要你用的是Windows系统,日常生活中遇到的大部分系统问题——磁盘满了、程序卡死、端口被占用、网络不通、电脑型号查不到——几乎都能用几条命令快速定位和解决。学CMD不是让你背命令大全,而是让你掌握一套绕过图形界面、直接和Windows系统对话的通用能力。
这篇文章我不会罗列什么"100条命令大全"让你去背。我会从实际使用场景出发,把最常用、最能解决问题的CMD命令和DOS命令拆开讲清楚,包括每条命令的原理、参数、常见坑,还会穿插一些我在日常维护和开发中积累的实操经验。适合人群:刚接触命令行的新手、想系统梳理一遍的开发者、以及所有被Windows各种小问题折磨过的普通用户。
1.1 先搞清楚:CMD、DOS命令、批处理到底是什么关系
这三者经常被混着说,但它们其实是三个层面的东西。
DOS是上世纪八九十年代的操作系统,全称Disk Operating System,它没有图形界面,所有操作都靠键盘敲命令完成。你现在看到的很多命令——cd、dir、copy、del——就是从那个时代流传下来的遗产。
CMD是Windows系统里的命令行解释器程序,全称是Command Prompt,也就是你按下Win+R输入cmd后弹出的那个黑色窗口。它是一个程序,负责接收你输入的命令、解析、然后交给系统去执行。CMD继承了DOS时代的命令语法,同时兼容Windows新增的一些工具命令,比如ping、ipconfig、tasklist。
批处理则是把多条命令写进一个以.bat或.cmd结尾的文本文件里,双击就能按顺序执行。它相当于把零散的命令"打包"成自动化脚本。
你可能还听过PowerShell。PowerShell是微软后来推出的更强大的命令行环境,支持对象、管道、脚本语言等。但CMD并没有被淘汰,它依然在大量系统工具、开发工具、安装脚本里被默认调用。很多老运维习惯用CMD,因为它在不同Windows版本之间表现稳定、语法简单、调试直观。后面我会单独用一章讲CMD和PowerShell到底怎么选。
1.2 以管理员身份运行,这个习惯直接决定成败
学CMD第一条要记住的,不是命令,而是权限。
Windows的命令行窗口分两种运行模式:普通模式和管理员模式。普通模式下,你只能在用户权限范围内操作,很多命令会提示"拒绝访问";管理员模式下,你才有权限修改系统设置、操作系统文件、管理服务。
打开管理员CMD的方式是:按Win键,输入cmd,右键点击"命令提示符",选择"以管理员身份运行"。或者按Win+X,在弹出的菜单里直接选"终端(管理员)"。
我见过很多新手踩坑:执行powercfg -h off提示无效,执行dism命令报错,执行net start提示拒绝访问,原因都是没有以管理员身份运行。后面讲到的关闭休眠、清理系统文件、修复系统镜像,全部需要在管理员CMD里操作。所以这个习惯最好一开始就养成——凡是涉及系统级改动的命令,一律在管理员窗口执行,不要嫌麻烦。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 高频DOS命令速查:按场景分类,比背"命令大全"实用得多
市面上流传的各种"DOS命令大全"列表,动辄一百多条,但里面大半你可能一辈子都用不上。我根据自己的实际使用频率,把命令按场景分成四大类,每类挑最核心的几讲透,讲完你就知道它们分别在什么场景下能被用上了。
2.1 目录与文件操作:cd、dir、md、rd、copy、move、del
这一类是所有命令的基础,也是你打开CMD后必然要面对的。
cd是切换目录。比如你要进入D盘的某个项目文件夹,先输入d:切换到D盘,再cd D:\work\project进入指定路径。注意,在CMD里切换盘符不能直接用cd D:,必须先输入盘符加冒号,这是很多新手容易卡住的地方。另外,cd ..返回上一层目录,cd \直接回到当前盘的根目录。
dir是查看目录内容。裸敲dir显示当前目录下的文件和文件夹,加上/a可以显示隐藏文件,加上/s可以递归显示子目录内容。运维排查时我常用dir /s /b获取完整路径列表,方便批量处理。
md和rd是创建和删除目录。md test创建test文件夹,rd test删除空文件夹。如果文件夹里有内容,需要加/s参数强制删除,比如rd /s /q test,其中/q是安静模式,不询问确认。这里要提醒一下:rd /s删除不可恢复,不会进回收站,操作前务必确认路径没有写错。
copy和move分别是复制和移动。copy a.txt D:\backup把a.txt复制到D盘backup目录,如果目标目录下有同名文件,默认会询问是否覆盖,加/y参数可以跳过询问直接覆盖。move的用法类似,但它会把源文件剪切走。批量操作用copy配合通配符很强,比如copy *.jpg D:\photos一次复制所有jpg图片。
del是删除文件。del a.txt删除单个文件,del *.log删除当前目录下所有log文件,加/s可以递归删除子目录里的文件。同样,del不会进回收站,删除前最好先dir看一眼当前目录,确认自己在正确的位置。
不要小看这些基础命令,很多批处理脚本的骨架就是它们。实际工作中我经常用一条del /s /q *.tmp清理开发项目里散落的临时文件,比在资源管理器里一个个翻效率高太多了。
2.2 网络诊断三件套:ping、ipconfig、tracert,加一个netstat
网络问题排查,CMD是最好用的工具,没有之一。
ping用来测试网络连通性。ping www.baidu.com会发送数据包并返回延迟和丢包率。如果ping不通,先ping网关或局域网内其他机器,能定位是外网问题还是内网问题。进阶参数:ping -t持续ping,按Ctrl+C停止,适合长时间观察网络稳定性;ping -n 10指定ping 10次后自动停止。
ipconfig是查看网络配置。裸敲ipconfig显示IP地址、子网掩码、默认网关。加/all显示更详细的信息,包括DNS服务器、MAC地址、DHCP租约时间等。排查上不了网时,第一件事就是敲ipconfig /all,确认IP获取是否正常、DNS配置是否合理。ipconfig /flushdns刷新DNS缓存,当你改了DNS配置或遇到DNS解析异常时非常有用。
tracert是追踪路由。tracert www.baidu.com会显示从你电脑到目标服务器经过的每一跳节点和延迟。网络慢的时候跑一次tracert,能看到延迟是出在本地的哪一跳,还是在运营商的骨干网,还是在目标服务器端。排查"为什么网页打开特别慢"这类问题,tracert比ping更精准。
netstat是看网络连接的。netstat -ano列出所有活动的网络连接,最后一列是进程PID。开发中最常见的场景是"端口被占用":启动服务时提示8080端口被占用,用netstat -ano | findstr 8080找到占用8080的PID,再用tasklist | findstr PID反查是哪个进程,最后用taskkill /F /PID PID结束它。这套组合拳几乎每天都要用,建议直接记下来。
在局域网维护场景里,netstat配合arp命令还能排查环路问题。arp -a查看本机的ARP缓存表,如果发现大量异常条目或同一IP在不同MAC之间频繁跳变,基本可以怀疑局域网内有环路或ARP欺骗。配合netstat -an | findstr 192.168.1看看有没有异常的广播流量连接,基本能定位到问题设备范围。这个技巧在办公室网络环境里很实用。
2.3 进程与系统信息:tasklist、taskkill、systeminfo
tasklist是列出当前运行的进程。裸敲显示所有进程名、PID、内存占用,加/fi可以按条件过滤,比如tasklist /fi "imagename eq chrome.exe"只看Chrome的进程。配合/svc参数还能显示进程对应的系统服务,排查后台服务异常时用得上。
taskkill是结束进程。taskkill /PID 1234结束PID为1234的进程,/F强制结束,/T连同子进程一起结束。遇到程序卡死、关不掉的情况,这个命令比打开任务管理器找到对应进程再结束要快得多。实操中我经常一条taskkill /F /IM chrome.exe把整个Chrome的所有进程一次性关掉,解决内存占用异常的问题,再重新打开。
systeminfo是查看系统整体信息。裸敲会显示操作系统版本、安装时间、系统制造商、BIOS版本、物理内存总量、网卡配置等一大串信息。远程排查电脑配置时,比让对方一步步打开"系统属性"去截图方便太多。
还有一个wmic工具,虽然官方现在主推PowerShell替代,但在CMD里依然好用。wmic csproduct get name查电脑型号,wmic bios get serialnumber查序列号,wmic diskdrive get model,serialnumber查硬盘型号和序列号,wmic baseboard get product,manufacturer查主板信息。这几条在资产管理、硬件故障排查时非常有用。注意,部分新版本Windows的wmic可能默认未安装,如果提示找不到命令,可以用PowerShell的Get-CimInstance替代。
3. 管道、重定向与批处理:从"敲命令"到"写脚本"的跳跃
单条命令解决的是单点问题,但很多日常操作是重复性的。这时候就需要两条进阶技能:一是把命令的输出保存或串联起来,二是把多条命令固化成一个脚本。掌握这两步,你才真正开始"用"CMD,而不是"玩"CMD。
3.1 重定向:把命令结果变成文件
重定向就是把命令窗口里输出的内容写到文件里。>是覆盖写入,>>是追加写入。2>是把错误信息也保存下来。
举几个实际场景。你跑了ipconfig /all,想把结果发给别人看,直接ipconfig /all > C:\network_info.txt,然后把这个txt发给对方就行。你排查崩溃日志,需要把程序输出存下来,shutdown /r /t 3600 > C:\shutdown_log.txt。写批处理脚本时,echo 开始备份 >> C:\backup_log.txt可以把执行日志不断追加到同一个文件里。
还有一个进阶用法:type命令配合重定向,可以快速合并文件。比如type a.txt b.txt > c.txt把两个文本文件合并成一个,比用记事本打开复制粘贴要快得多。
3.2 管道:把命令串成流水线
管道的符号是|,作用是把左边命令的输出,作为右边命令的输入。它让你能把多个命令组合成一条工作流。
最经典的组合是配合findstr做过滤。比如你想看当前系统里所有包含"python"关键字的进程:tasklist | findstr python。查某个端口是否在监听:netstat -ano | findstr 8080。查看系统日志里有没有错误关键词:systeminfo | findstr /i "内存"。管道就像工厂流水线,上一个工序的产出直接送到下一个工序,中间不需要手动干预。
我自己的习惯是"管道+findstr"组合拳解决80%的查询需求。与其在长长的输出列表里翻找,不如直接过滤出关键字,一秒定位。
3.3 批处理脚本:把日常操作固化成一键运行
批处理就是把多条命令按顺序写进一个.txt文件,然后把扩展名改成.bat或.cmd,双击即可运行。
一个简单的批处理脚本长这样:
bat复制@echo off
echo 正在清理临时文件...
del /s /q C:\Users\%username%\AppData\Local\Temp\*.*
echo 清理完成!
pause
第一行@echo off是不显示命令本身,只显示输出结果,避免屏幕上一堆乱糟糟的命令行。%username%是系统内置变量,会自动替换成当前用户名。pause是让窗口在执行完后停留,等待按键关闭,否则窗口会一闪而过什么都看不清。
批处理里还能用判断和循环。判断用if,比如检测某个文件是否存在再执行后续命令:
bat复制if exist D:\backup\data.sql (
echo 备份文件存在,开始复制
copy D:\backup\data.sql D:\backup\data_old.sql
) else (
echo 备份文件不存在,请检查
)
循环用for,比如批量重命名当前目录下所有txt文件:
bat复制for %%f in (*.txt) do ren "%%f" "前缀_%%f"
注意,在批处理文件里写for循环,变量要用两个百分号%%f;如果直接在CMD窗口里敲,用单个百分号%f。这是最容易踩的坑,没有之一。
批处理真正强大的地方在于,你可以把一套完整的、需要反复执行的运维操作固化下来。比如我有一台测试机,每天要清理日志、重启某个服务、备份数据库,我就把这些步骤写成一个bat,设为计划任务每天自动跑,省去了大量重复劳动。
4. 热搜里的CMD实用场景,我实测了一遍
看了一圈大家在搜索引擎里问得最多、搜得最多的CMD相关话题,基本集中在几个超实用场景:关闭休眠、清理C盘、杀进程、查硬件信息。这几个场景我用真机实测过,把具体命令和注意事项整理出来,可以直接照着操作。
4.1 关闭休眠,立省6.33GB
这是热搜里最显眼的一个操作,实测效果确实立竿见影。Windows的休眠功能会把内存中的数据完整写到硬盘里的hiberfil.sys文件中,这个文件默认占用的空间约为物理内存的40%到75%。8GB内存的机器,hiberfil.sys就能占掉6GB左右。
关闭休眠的命令就一条,需要在管理员CMD里执行:
code复制powercfg -h off
执行完没有任何提示,但C盘瞬间多出几个G。这个操作适合不需要使用"休眠"和"快速启动"功能的用户。注意,关闭休眠后,开始菜单里的"休眠"选项会消失,"快速启动"也会失效,但"睡眠"功能不受影响。
想重新打开休眠,执行powercfg -h on即可。在关闭休眠后,如果发现"快速启动"功能对你很重要,可以在电源选项设置里先确认是否真的需要,再决定是否重新开启。我个人在台式机上习惯关闭休眠,因为台式机基本用睡眠就够了,硬盘空间更宝贵。
4.2 清理C盘垃圾的三连招
C盘飘红是Windows用户的永恒话题。CMD清理主要有三招。
第一招,清理系统临时文件。还是在管理员CMD里,先进入临时目录再删除内容:
code复制del /s /q C:\Windows\Temp\*.*
del /s /q C:\Users\%username%\AppData\Local\Temp\*.*
注意,有些临时文件正在被系统或程序占用,删除时会提示"无法删除",这正常,跳过即可。命令行无法删除的占用文件,靠后面的磁盘清理工具也能处理掉。
第二招,调用系统自带的磁盘清理工具。cleanmgr命令会打开图形化磁盘清理界面,但也可以加参数直接扫描:
code复制cleanmgr /sagerun:1
这个操作需要先在cleanmgr里配置过计划,一般用户直接用不带参数的方式,手动勾选要清理的类型更安全。重点勾选"Windows更新清理"和"临时文件",这两项通常能清出几个G。如果是系统更新后遗留的旧版本文件,可以用cleanmgr的"清理系统文件"选项,能扫出大量Windows.old文件夹内容,但这一步会花费较长时间,建议选在不用电脑的时候执行。
第三招,检查并清理Windows组件存储。如果系统有问题,更新组件会越积越多,执行:
code复制Dism /Online /Cleanup-Image /StartComponentCleanup
这个命令会把Windows组件存储里不再需要的旧版本组件清理掉,释放系统盘空间。注意,这个命令耗时较长,而且必须管理员权限,中途不要关机。
三招用下来,C盘一般能多出5到10个G。如果还不够,继续排查"休眠文件"和"页面文件"的大小,或者看看有没有把自己下载的大文件误放在C盘。
4.3 杀进程:程序卡死、端口被占用的终极解法
程序卡死弹窗点了半天没反应,任务管理器也卡住不动,这时候CMD是最可靠的出口。先列出所有进程找到目标PID:
code复制tasklist | findstr 程序名关键字
如果你知道程序的名字,直接强制结束:
code复制taskkill /F /IM 程序名.exe
但更多时候,你只知道"某个端口被占用,服务起不来"。这时候用端口反查进程:
code复制netstat -ano | findstr 8080
输出最后一列就是占用8080端口的PID。接着用taskkill结束它:
code复制taskkill /F /PID 8923
如果是Java、Node这类开发服务,经常会有多个关联进程残留,加上/T参数可以把父子进程一起结束:taskkill /F /PID 8923 /T。这个组合我在日常开发中至少用了几百次,从没失手。
4.4 查看电脑出厂日期和硬件信息
"我电脑是什么时候买的?什么配置?怎么查?"这类问题,答案是wmic。
查看BIOS版本和出厂日期:
code复制wmic bios get releasedate
输出里的日期格式是年月日时分秒,比如20210715200000.000000+480,代表2021年7月15日。这就是官方出厂时间。查电脑型号:
code复制wmic csproduct get name
查硬盘信息:
code复制wmic diskdrive get model,serialnumber,size
查内存条信息:
code复制wmic memorychip get capacity,speed,manufacturer
这几条命令在买二手电脑验机、公司资产盘点、排查硬件兼容性时都非常实用。
4.5 顺手把开机启动项管起来
开机越来越慢,多半是启动项太多。CMD里可以直接查看当前用户的启动项:
code复制reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"
第一行查当前用户的启动项,第二行查所有用户的启动项(需要管理员权限)。看到不想开机启动的程序,可以记下对应的注册表键名,然后用:
code复制reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v 程序键名 /f
删除。要注意,HKLM下的启动项大多是系统级或驱动级的,别乱删,删错了可能影响系统启动。HKCU下的一般是软件自启动项,相对安全,但删除前最好也查一下对应的软件名,确认没有再动手。
5. CMD排错现场:闪退、0x0000142与Tab补全失效
CMD本身也会出问题。下面是几个高频故障的排查过程和解决办法,都是我在真实电脑上处理过的,按"症状—排查—解决"的结构写,方便你照着操作。
5.1 症状一:一打开CMD就闪退,或者窗口连续弹出又消失
这个症状很典型:按下Win+R输入cmd回车,黑色窗口闪一下就没了;或者电脑开机后,CMD窗口连续弹出又迅速消失。
排查思路,先从最简单的可能性开始。第一种可能是系统环境变量Path出了问题。右键"此电脑"→属性→高级系统设置→环境变量,看系统变量Pan里的Path是否被改动过。如果Path里残留了不存在的路径,或者被某个软件安装程序错误修改,CMD启动时加载不了基本工具就会闪退。把无效路径删掉,新建CMD窗口验证。
第二种可能是用户级启动项里加载了异常脚本。CMD启动时会读取注册表AutoRun设置,如果AutoRun指向了一个不存在的脚本或命令,CMD启动就会报错或闪退。排查命令:
code复制reg query "HKCU\Software\Microsoft\Command Processor" /v AutoRun
reg query "HKLM\Software\Microsoft\Command Processor" /v AutoRun
如果返回值里有可疑路径,用reg delete删掉对应的AutoRun值即可。很多"CMD闪退"的奇特案例,最后都定位在这里。
第三种可能是系统文件损坏。网络上一度流传过删错系统关键文件导致CMD完全不能用的案例。处理方法:管理员CMD里执行sfc /scannow,它会扫描并修复受保护的系统文件。如果sfc提示无法修复,接着用DISM命令修复系统镜像:
code复制DISM /Online /Cleanup-Image /RestoreHealth
然后再跑一次sfc。这套组合拳基本能覆盖大部分系统文件层面的问题。
5.2 症状二:运行某个程序报错0x0000142
搜热词里反复出现"cmd oxc0000142",这个报错信息全称是"The application failed to initialize properly (0x0000142)"。它通常意味着对应程序或依赖的DLL文件初始化失败。
排查步骤:先确认是不是只有CMD报这个错,还是所有程序都报。如果所有程序都报,大概率是系统DLL被替换或损坏,执行sfc /scannow和DISM /RestoreHealth即可。如果只有CMD报错,考虑是不是系统里某个安全软件或优化工具把cmd.exe的相关DLL做了隔离,去安全软件的隔离区恢复即可。
如果是运行某个特定的软件(比如开机提示某个程序的组件报0x0000142),通常是该程序的运行库缺少VC++运行库或.NET组件,去控制面板里卸载后重新安装对应的运行库,问题就能解决。网上有些教程一上来就让重装系统,其实多数情况下用sfc修复一下就够了。
5.3 症状三:CMD里按Tab补全不了路径和文件名
CMD里敲路径时按Tab可以自动补全,这是非常高效的功能。如果按Tab没反应,通常是注册表里的CompletionChar被改了或删了,恢复方法是在管理员CMD里执行:
code复制reg add "HKCU\Software\Microsoft\Command Processor" /v CompletionChar /t REG_DWORD /d 9 /f
reg add "HKCU\Software\Microsoft\Command Processor" /v PathCompletionChar /t REG_DWORD /d 9 /f
其中9对应Tab键的ASCII码。设置完成后重新打开CMD,Tab补全就恢复了。
这个故障有时候是某些"优化工具"在"优化"过程中误改了注册表导致的,所以我的经验是:不要轻易用第三方优化工具去"修正"系统设置,很多问题都是优化出来的。
5.4 场景四:在IDE里调不了CMD,但在系统CMD里正常
搜热词里有一条"mvn可以在cmd执行,但在idea的命令窗中不行",这是很常见的开发环境问题。系统CMD里正常,说明命令本身和Path都没问题;IDE里的终端窗口不行,基本可以断定是IDE没有继承系统环境变量。解决办法:重启IDE让它重新加载环境变量;如果还不行,在IDE的设置里手动指定Shell路径和Path。这类问题跟CMD本身关系不大,但经常遇到,顺便提一下。
6. CMD和PowerShell,到底该怎么选、怎么配合
写到这,肯定有人会问:现在不是都推荐PowerShell吗?为什么还要学CMD?这两者的关系,我用一句话概括:CMD是Windows几十年的兼容底盘,PowerShell是面向未来的现代化引擎。你完全可以只学PowerShell,但在实际操作中你会发现,大量工具、文档、脚本、快捷键仍然默认调用CMD。
6.1 定位差异:前者是兼容遗产,后者是现代化Shell
CMD的优势是简单、稳定、随处可用。它背靠的是Windows NT体系里最基础的命令解释逻辑,几乎所有Windows版本都内置,几乎所有需要调用命令行外部程序的软件(包括各种开发工具、安装包脚本、CI/CD流水线)都默认用cmd.exe来执行。
PowerShell的优势是强大、面向对象。它不只是命令解释器,更是一个完整的脚本语言和自动化平台。它的命令支持对象管道,你可以直接把一个命令的输出结果当成对象交给下一个命令处理,而不是像CMD那样只能处理文本流。
| 对比项 | CMD | PowerShell |
|---|---|---|
| 上手难度 | 低,语法简单 | 中高,概念多 |
| 兼容性 | 好,几乎所有Windows工具都认 | 好,但个别老脚本不支持 |
| 脚本能力 | 简单批处理 | 完整编程语言 |
| 输出格式 | 纯文本 | 对象 |
| 后台任务/定时任务 | 需要配合计划任务 | 有更完备的作业机制 |
6.2 实战中的选择标准,我的判断
在遇到下面几种情况时,我会优先用CMD:
第一,处理老的.bat批处理脚本。很多运维脚本是十几年前写的,还在生产环境里跑,没有特殊原因不要动它,用CMD跑最放心。
第二,快速执行单条系统命令。就是个ping、ipconfig、tasklist,没必要开PowerShell,CMD里敲完就走。
第三,在C/C++、Java、Node等开发工具链的构建环境里。很多构建工具生成的命令默认调cmd.exe,你改了默认Shell反而可能出问题。
在遇到下面几种情况时,我建议用PowerShell:
第一,写复杂的自动化脚本,比如需要批量管理AD用户、操作Excel、调用系统API,PowerShell的对象模型帮你省掉大量文本解析的力气。
第二,处理现代Windows服务和服务器的管理任务。比如管理Hyper-V虚拟机、Azure云资源,PowerShell的模块生态更完整。
第三,需要处理JSON/CSV/XML数据时,PowerShell内置的ConvertFrom-Json、Export-Csv等命令比CMD里的文本处理方便太多。
6.3 混用几招:让两个Shell互相配合
实际工作里,我不太纠结"非此即彼"。常用的方式是:
在CMD里直接调用PowerShell命令,用powershell -Command "Get-Process";在PowerShell里调用CMD命令,直接用cmd /c dir或ipconfig也行,PowerShell会直接执行可执行文件。
我在CMD里最常用的一个混用技巧是,用PowerShell的管道处理CMD的文本输出:先跑ipconfig /all | powershell -Command "$input | Select-String 'IPv4'",把CMD的输出交给PowerShell做精细过滤。虽然写起来长了点,但搞定了CMD里findstr做不了的复杂匹配。
另外,VSCode里设置的默认终端,我通常会保持为"命令提示符"或"PowerShell"都行,关键是掌握它们的切换方式:在终端窗口里输入powershell进入PowerShell,输入cmd回到CMD。很多开发工具需要调cmd环境,你在这个窗口里随时切就行。
6.4 聊聊CMD的发展现状
微软这几年一直在推Windows Terminal作为默认终端,把CMD和PowerShell都集成进去了。Windows Terminal支持多标签页、分屏显示、自定义主题,也比老式CMD窗口好看得多。如果你的系统是Win10及以上,建议直接去应用商店装一个Windows Terminal,然后把默认配置文件设为"命令提示符"。这样你既保留了CMD的稳定兼容,又获得了现代化终端体验,还能在一个窗口里同时开多个标签页,一边跑构建命令一边看日志,效率高很多。
关于CMD将来会不会被移除这个问题,业界讨论了很多年,目前看短期内不会,因为数十万计的既有脚本、软件安装包、开发工具链都依赖cmd.exe,微软不太可能做这种破坏兼容性的事情。但趋势上,微软确实在逐步把新的特性投向PowerShell。我的看法是:CMD的基础技能必须会,PowerShell的进阶能力尽量学,两者不冲突,反而互相补充。
我自己从刚开始学电脑时,在CMD里用dir和cd一点点理解文件系统的结构,到后来用批处理一键部署应用,再到如今把CMD命令和PowerShell混合使用来处理复杂的系统运维任务,这条路走了很多年。CMD教会我最重要的一件事是:图形界面只是系统的表面,真相在命令行里。遇到图形界面解不了的题,打开CMD,很多答案就在那里。希望这篇文章能帮你打开这个窗口,然后你会发现,Windows原来可以这么听话。
