如果你只在图形界面里点过鼠标,那你很可能低估了Cmd命令的价值。前阵子我遇到一台远程服务器,桌面进程直接僵死,资源管理器怎么点都没反应,远程桌面里只剩一个黑底白字的命令行窗口还能输入。我就是靠三行Cmd命令完成了查进程、杀进程、重启服务,几分钟把机器救了回来。这不是什么花哨技术,就是Windows自带的命令提示符,也就是Cmd命令的日常用法。
这篇万字详细版会把命令按真实使用场景重新组织,覆盖文件目录操作、系统信息与进程管理、网络诊断、批处理自动化、效率技巧和安全习惯。每条命令都会给语法、实例,以及那些只有在实际敲过之后才懂的坑。适合刚接触命令行的新人,也适合平时只用GUI、偶尔想提升效率的普通用户,对于要在无图形环境里做维护的人来说,更是可以直接当手册查。
1. 为什么现在还要花时间学Cmd命令
1.1 GUI维护场景中的三块硬骨头
图形界面确实直观,但在三类场景里它是真的靠不住。
第一类是远程维护。系统负载过高时,显卡驱动崩溃、桌面进程僵死、右键菜单失灵是常有的事,但命令行窗口往往还能正常工作。只要终端能输入,就能查进程、杀进程、看网络连接、重启服务,这几乎是最后的救命通道。
第二类是无图形界面的系统。Windows Server的Core安装模式没有桌面外壳,日常配置完全依赖命令。如果你只会在“设置”里点来点去,进入这种环境会瞬间失去操作能力。会Cmd命令,意味着你不会被某个特定界面绑死。
第三类是批量操作。一百台机器要查MAC地址、要统一改DNS、要拷贝某个目录,用鼠标一台台点开是灾难。写一个for循环加远程命令组合,几分钟就能跑完。这个批量思维,恰恰是从命令行开始的。
1.2 命令思维的起点:路径、参数、输出
有人觉得Cmd难是因为命令多,其实核心逻辑非常简单:一条完整命令等于“程序名 + 参数 + 对象”,命令执行后可以把结果输出到屏幕,也可以通过重定向符号写到文件。
比如这个常见操作——批量给当前目录下所有txt文件加前缀:
for %i in (*.txt) do ren "%i" "backup_%i"这行命令在Cmd窗口里直接执行,含义是遍历当前目录下所有txt文件,逐个执行重命名。如果用鼠标,你得一个个F2改名,要重复几十次。用命令就是一瞬间的事。
理解这个“程序+参数+输出重定向”的框架后,遇到没见过的命令不要慌,任何命令后面加一个/?都会弹出官方帮助说明。Cmd的学习方式不是背参数表,而是学会怎么查、怎么组合、怎么验证。
2. 文件与目录操作:从高频命令到robocopy迁移实战
2.1 目录切换与内容浏览
cd是所有人接触Cmd的第一个命令。它有一个容易踩的坑:默认情况下,cd不能直接切换盘符。你输入cd D:\workspace,回车之后当前目录纹丝不动,原因是Cmd默认不切换驱动器。
跨盘符必须用cd /d:
cd /d D:\workspace/d参数的含义是同时改变当前驱动器和目录。这个细节很多教程都会忽略,但实际使用频率极高。
浏览目录内容主要用dir,它的常见参数组合如下表,建议直接记:
| 参数 | 作用 | 实测体会 |
|---|---|---|
dir /b | 只显示文件名,去掉详细资讯 | 最适合配合for循环做批量处理 |
dir /a | 显示隐藏文件和系统文件 | 排查目录“凭空消失”的文件时很有用 |
dir /s | 递归显示子目录内容 | 配合 /b 可以快速统计目录树文件列表 |
dir /od | 按日期排序,最新文件在最后 | 找到最近修改的文件最快的方式 |
dir /tw | 显示最后写入时间 | 配合排序能看到哪个文件刚被改动 |
tree /f也是被低估的命令,它能把整个目录结构画成一棵带文件的树,用来快速理解一个陌生项目的组织方式非常直观。
tree /f D:\workspace\project2.2 文件创建、删除与重命名:高频操作速查
新建空文件在GUI里要先建文本再改名,Cmd里一行搞定:
type nul > empty.txt echo. > another.txt两种写法都能生成空文件。type nul读入空设备作为数据源,echo.输出一个空行到文件。这里的坑是很多人写echo > file,这个写法会把ECHO is on.这段文字写进文件,因为你没加小数点。
超过文件内容时用echo:
echo hello world > note.txt追加内容用双大于号:
echo append line >> note.txt删除文件的命令是del,它的常用参数是/f(强制删除只读文件)、/q(不询问)、/s(递归删除子目录文件)。这组参数组合在一起非常凶猛,del /q /s会静默递归删完当前目录下所有匹配文件,执行前务必确认当前目录是你想删的那一个。
删除整个目录树用的是rmdir,或者简写rd:
rd /s /q D:\old_temp_folder/s表示连同子目录和文件一起删除,/q表示安静模式。这两个参数一旦同时出现,目标目录会瞬间消失,没有任何回收站保护。这是Cmd里最需要敬畏的命令之一,后文安全部分还会专门强调。
重命名用ren:
ren oldname.txt newname.txt2.3 copy、xcopy和robocopy该怎么选
很多人把三个复制命令混用,其实适用场景完全不同。
copy适合单文件或少量文件,它的一个隐藏用法是合并文件:
copy /b 1.jpg + 2.jpg 3.jpg/b表示按二进制合并,能把两个文件首尾拼接。但拼接后的文件本质上是两个文件粘在一起,不是合法图像,别拿它做正经业务。
xcopy是目录级复制的主力。比如把整个目录连子目录一起复制到备份位置:
xcopy D:\docs E:\backup /e /i /d /y参数解释:/e复制所有子目录包括空目录,/i如果目标不存在就按目录创建,/d只复制比目标新的文件,/y覆盖不提示。这组参数是增量备份的经典组合。
robocopy是微软在Vista之后主推的复制工具,也是我处理服务器文件迁移时的首选。它的优势体现在三个地方:支持多线程、断点重试、日志记录。一个典型的备份命令:
robocopy D:\docs E:\backup /e /xo /mt /r:2 /w:3 /log+:backup.log/e全量复制子目录,/xo排除更旧的源文件(只复制新文件和新增文件),/mt使用多线程提高速度,/r:2和/w:3表示单个文件失败重试2次、等待3秒,/log+把日志追加写入文件。
实际项目中,我遇到大目录复制总会优先想到robocopy,因为它不会像copy那样失败一次就停住,而且日志完整,事后能知道哪些文件没拷过去。
2.4 内容查看与关键词检索
type命令可以把文本文件内容整个打到屏幕上:
type config.ini文件太长时可以用more分页显示,按空格翻页,按q退出。不过在Cmd里直接看长文件体验一般,临时查看用type就够了。
关键词检索有两个命令:find和findstr。find是基础版,适合精确匹配:
find "error" app.logfindstr是增强版,支持正则表达式、多文件、忽略大小写。我经常用它来快速定位日志中的异常:
findstr /i /n "error exception" *.log/i忽略大小写,/n显示行号。熟悉正则的人可以这样用:
findstr /r "^[0-9].*timeout" network.log这个表达式匹配以数字开头且包含timeout的行,在排查超时问题时会非常高效。
fc命令可以做文件对比,fc /b按二进制比较,fc默认按文本比较。差异文件排查时比肉眼打开两个文件来回看靠谱得多。
3. 系统信息、进程与服务:排查故障的第一梯队
3.1 系统信息:ver、hostname、whoami与systeminfo
ver显示系统版本号,hostname显示计算机名,这两个都是简单但高频的信息查询命令。
whoami的重要性很多人低估了。它不只是显示当前用户名,还能快速判断权限级别:
whoami whoami /groups普通用户运行时会显示当前域和用户名;如果当前会话有管理员权限,whoami /groups的输出里会有明显的管理员组成员标示。远程维护时用它确认自己是不是提权状态,比猜更可靠。
systeminfo是命令行的系统体检报告。它一次性给出系统版本、硬件信息、补丁列表、网卡配置、系统启动时间。我最常看的是“系统启动时间”这一项,判断一台机器是刚重启过还是已经运行了几十天,很多诡异的性能问题都和长时间未重启有关。
中文版系统里systeminfo的输出经常出现乱码,这跟Cmd默认代码页有关。在Cmd窗口执行:
chcp 65001可以把代码页切换为UTF-8。如果切换后仍乱码,把代码页切换回936也行,这是中文系统的传统编码。遇到乱码先想到chcp,不要急着换终端工具。
3.2 进程管理:tasklist与taskkill实战
tasklist是进程列表命令,最常用的参数是/svc和/fi:
tasklist /svc tasklist /fi "IMAGENAME eq chrome.exe" tasklist /fi "PID eq 1234"/svc会把每个进程对应的服务名列出来,排查“这个进程到底属于什么服务”时非常好用。/fi是过滤器,通过镜像名或PID精准定位进程。
结束进程用taskkill。最简洁的方式是按PID结束:
taskkill /pid 1234 /f/f强制结束,/t同时结束子进程。按进程名结束更直观:
taskkill /im notepad.exe /f一个经典场景:8080端口被占用,但又不知道是谁占的。排查链路是这样的:
netstat -ano | findstr :8080 tasklist /fi "PID eq 12345" taskkill /pid 12345 /f第一行从网络连接里找到占用8080端口的PID,第二行查这个PID对应的进程名,第三行结束它。这个组合拳在开发环境里几乎每天都能用到。
3.3 服务管理:sc与net的旧东西也要会用
查看服务状态用sc query:
sc query spooler修改服务启动类型用sc config。这里有个非常容易忽略的细节:start=后面必须有一个空格再接参数值。这是sc命令的经典怪癖,写成start=auto会直接报错,正确写法是:
sc config spooler start= auto启动和停止服务也有两种方式。net start/net stop是老牌命令,适合临时启停;sc适合详细配置。实际操作中我一般用net stop快速停服务,用sc query看状态,用sc config修改启动行为。
服务排查场景里还有个用法值得记,通过tasklist /svc反过来找服务对应的进程PID,再用taskkill结束僵死的服务进程。某些服务卡死时,标准net stop等半天没反应,直接结束进程反而更快,但前提是你清楚该服务的依赖关系。
3.4 环境变量:set与setx
set查看当前会话的所有环境变量:
set set PATH临时设置当前窗口的环境变量,直接:
set myvar=test echo %myvar%这个变量只在当前Cmd窗口有效,关闭窗口即失效。要永久设置环境变量,用setx:
setx JAVA_HOME "C:\Program Files\Java\jdk-17"setx有三个坑。第一,它不会修改当前已打开的Cmd窗口,只影响新开的进程。第二,设置系统级变量需要管理员权限,用setx /M时尤其要注意。第三,用setx修改PATH时要特别小心,直接写成setx PATH "C:\new\bin;%PATH%"在PATH很长时可能被截断,导致新窗口命令行都打不开。安全做法是先把%PATH%复制到文本编辑器里确认长度,再手工拼好完整字符串。
3.5 磁盘与文件系统测试工具
fsutil是文件系统底层工具,普通用户用得少,但在测试场景里有一个非常实用的功能——快速创建指定大小的大文件,用来验证磁盘写入速度或测试磁盘满时的行为:
fsutil file createnew C:\test\1gb.bin 1073741824后面这个数字是字节数,1073741824就是1GB。生成一个文件很快,适合做传输速度测试,测试完记得删除。
diskpart是磁盘分区工具,进入后是交互式环境:
diskpart list disk select disk 1 detail disklist disk列出所有磁盘,select disk 1选定第1块磁盘,detail disk查看详情。这里必须强调,clean命令会清空整块磁盘,我见过有人输入select disk选错盘号后直接翻车。新手练习diskpart建议只在虚拟机或测试盘上进行。
4. 网络诊断命令:从ipconfig到netsh的一步步排查
4.1 ipconfig /all 之前,先理解什么是IP租约
ipconfig是最常用的网络查询命令。单独执行显示基本IPv4、IPv6地址和网关,加/all显示完整信息:
ipconfig /all/all输出里包含DHCP服务器地址、DNS服务器地址、MAC地址、租约获取和过期时间。很多人只看IP地址就完事了,其实“租约”这一项在排查网络问题时价值极高。IP地址获取不到或频繁掉线,多半是DHCP租约问题。
解决域名解析缓存问题,用:
ipconfig /flushdns改了hosts文件不生效、DNS解析结果异常时先运行这个命令,把本地DNS缓存清掉,再重新解析,大概率就好了。
获取新IP地址的完整流程:
ipconfig /release ipconfig /renew/release释放当前IP租约,/renew重新向DHCP服务器申请地址。这两条命令在笔记本电脑切Wi-Fi网络后获取不到有效IP时非常有用。需要说明的是,如果网卡配置的是静态IP,/release会把IP释放掉且无法自动获取,执行前确认网卡是DHCP模式。
4.2 ping、tracert、pathping:三层排错路径
ping是连通性测试的首选。常用参数包括:
ping -n 10 192.168.1.1 ping -t 192.168.1.1 ping -l 1000 192.168.1.1-n指定发送次数,-t持续发送直到按Ctrl+C终止,-l指定数据包大小。失败时的反馈也有讲究:目标地址不可达是“Destination host unreachable”,超时则是“Request timed out”,前者说明路由方向有问题,后者说明数据包发出去但没回来,两者排查思路完全不同。
一个容易被忽略的参数组合是MTU探测:
ping -f -l 1472 192.168.1.1-f禁止数据包分片,-l指定包大小。如果这个包能通,说明链路MTU至少能容纳这个大小;如果返回“Packet needs to be fragmented”,就调小包大小再试。排查某些网页打不开、大包不通小包通的疑难杂症时,这个命令能派上大用场。
tracert用来查看到达目标经过的路由路径:
tracert -d 192.168.1.1-d禁止反向解析域名,速度会快很多。输出中每行代表一跳,星号表示这一跳没有响应。星号不代表一定是故障,很多网络设备出于安全考虑不响应tracert探测,只要最后一跳能到达目标,中间跳的部分星号可以接受。
pathping是ping加tracert的组合,它会先做路由跟踪,然后对每一跳做丢包率统计。输出结果比较慢,但能看到哪一跳丢包最严重,定位线路质量问题比分别执行两个命令更高效。
4.3 netstat:端口占用与连接状态的真相
netstat -an显示所有端口及其状态,netstat -ano额外显示进程PID,netstat -b显示可执行程序名但需要管理员权限。端口占用排查常用的还是-ano:
netstat -ano | findstr :8080连接状态的英文含义值得弄清,否则看到一堆状态会懵:
| 状态 | 含义 | 排查参考 |
|---|---|---|
| LISTENING | 端口正在监听 | 服务是否正常启动的初步信号 |
| ESTABLISHED | 连接已建立 | 正常通信中 |
| TIME_WAIT | 主动关闭后等待一段时间 | 大量出现时不用太担心,系统会自动回收 |
| CLOSE_WAIT | 对端关闭但本机未关闭 | 异常增多说明程序没正确释放连接 |
看到大量TIME_WAIT不要急着怀疑是故障,这是TCP正常关闭过程的一部分,只要数量没有持续猛增,一般不需要处理。真正需要注意的反而是CLOSE_WAIT堆积,那通常意味着上层程序没调用关闭连接的逻辑,属于应用层问题。
netstat -r可以查看路由表,作用等同于命令行版的route print,但更直观。
4.4 route、arp与netsh:边缘但实用的网络工具
route print -4查看当前IPv4路由表。添加临时静态路由:
route add 10.10.0.0 mask 255.255.0.0 192.168.1.254这个命令的意义是,当访问某个网段的数据包需要走不同网关时,可以临时指定路由。重启后失效,适合临时测试;如果要永久生效加-p参数。
arp -a查看本机缓存的其他设备MAC地址映射。排查IP冲突时可以先用它查看,发现两个设备抢同一个IP时,ARP表里能看到MAC地址更替。这个命令本身不危险,只是查看缓存,但理解了底层逻辑后,很多IP冲突排查都变简单了。
netsh是网络配置的集大成者。查看当前网卡配置:
netsh interface ip show config添加防火墙规则,开放某个端口:
netsh advfirewall firewall add rule name="Allow8080" dir=in action=allow protocol=TCP localport=8080在实际测试环境里,给内网服务临时放行端口用这条命令最直接。需要注意,netsh在新版系统仍然可用,但很多功能也开始逐步向PowerShell的命令let迁移,会netsh就等于会了一部分PowerShell的底层逻辑,不会有白学。
5. 批处理与计划任务:把Cmd变成自动化引擎
5.1 bat文件的基本骨架
把一系列Cmd命令写进文本文件并保存为.bat扩展名,就变成了批处理脚本。最基础的骨架如下:
@echo off rem 这是注释,不会执行 echo 开始清理临时文件... ipconfig /all pause@echo off关闭命令行回显,让脚本执行时不把每条命令本身打印出来。rem是注释。pause暂停并显示“请按任意键继续”,一般用于窗口运行脚本时留出时间看输出。
保存文件时建议用ANSI编码,路径别带中文或空格。如果脚本内容包含中文输出且出现乱码,可以把文件保存为ANSI,或者在脚本开头加上chcp 65001并保存为UTF-8。编码问题实测是新手写bat第一道坎,最好提前知道。
5.2 for循环:批处理的发动机
for是批处理里最重要的循环命令,它在命令行和批处理文件中的写法有区别:命令行用单百分号,批处理文件里用双百分号。
命令行直接执行:
for %i in (*.txt) do echo %i批处理文件里必须写成:
@echo off for %%i in (*.txt) do ( echo 查找到文件:%%i ) pause这个细节极其容易踩坑,写成单%会直接报语法错误。
for循环的常见形态有四种:
遍历当前目录文件:
for %%i in (*.txt) do echo %%~ni遍历所有文件夹:
for /d %%i in (*) do echo 文件夹:%%i递归遍历子目录:
for /r D:\work %%i in (*.jpg) do echo %%i数字递增循环:
for /l %%i in (1,1,10) do echo 第 %%i 轮/l的格式是“起始值,步长,结束值”,模拟了其他语言里的for循环。写批量操作时,这段逻辑配合%~ni这样的扩展符号可以提取文件名、扩展名、路径等,是批处理进阶的核心。
5.3 if判断与errorlevel:让脚本拥有逻辑
批处理的判断主要用if。判断文件是否存在:
if exist "C:\config.ini" echo 配置存在判断上一条命令是否成功,有两种写法。传统写法:
ping -n 1 192.168.1.1 >nul if errorlevel 1 echo ping失败 if errorlevel 0 echo ping成功errorlevel是上一条命令的退出码,0通常表示成功。注意if errorlevel 1的含义是“如果退出码大于等于1”,所以要先判断大的错误码,再判断小的。更直观的判断方式是直接使用%errorlevel%变量:
ping -n 1 192.168.1.1 >nul if "%errorlevel%"=="0" ( echo 可以连通 ) else ( echo 无法连通 )这个写法更接近编程语言的风格。批处理里还有一层比较难以察觉的坑——复合语句内的变量展开时机。默认情况下,%errorlevel%在整段括号被解析时就已经展开成初始值,不会实时更新。遇到循环内变量不更新的诡异问题,需要在脚本开头加一句:
setlocal enabledelayedexpansion然后把变量引用改成!var!而不是%var%。这是批处理新手进阶到熟练工的一道分水岭。
5.4 三个拿来能用的组合脚本
批量重命名文件,给当前目录下所有jpg文件加日期前缀:
@echo off for %%i in (*.jpg) do ( ren "%%i" "2025_%%i" ) echo 完成 pause清理临时文件,安全版本:
@echo off echo 即将清理以下目录中的临时文件: echo %TEMP% del /q /s "%TEMP%\*" >nul 2>&1 echo 清理完成 pause>nul 2>&1把标准输出和错误输出都丢弃,避免刷屏。但这类脚本执行前一定确认%TEMP%变量没有被恶意修改,且路径没有拼错。
自动备份目录到带时间戳的文件夹:
@echo off set stamp=%date:~0,4%%date:~5,2%%date:~8,2% mkdir D:\backup\%stamp% xcopy D:\data D:\backup\%stamp%\data /e /i /y echo 备份完成,目录 D:\backup\%stamp% pause%date%取日期字符串并切片拼成年月日格式。这个写法在中文系统的日期格式下可用,但不同系统的%date%格式有差异,第一次用先echo %date%确认一下格式,再调整切片的起始位置和长度。
5.5 计划任务:schtasks的完整用法
批处理脚本配合计划任务才能实现无人值守。schtasks是命令行创建计划任务的工具。创建每天凌晨3点执行的备份任务:
schtasks /create /tn "BackupData" /tr "D:\scripts\backup.bat" /sc daily /st 03:00 /ru SYSTEM /f/tn是任务名,/tr是要执行的程序路径,/sc daily是每天执行,/st 03:00是开始时间,/ru SYSTEM用系统账号运行,/f强制覆盖已存在的同名任务。
查询任务详情:
schtasks /query /tn "BackupData" /v /fo LIST修改任务执行时间:
schtasks /change /tn "BackupData" /st 04:00手动运行一次任务:
schtasks /run /tn "BackupData"删除任务:
schtasks /delete /tn "BackupData" /f一个容易被忽略的点:/tr里的脚本路径如果有空格,必须用双引号把整个路径包住。另外,如果任务里调用的bat本身还有相对路径依赖,容易被计划任务的工作目录搞混,建议在bat开头加一句cd /d %~dp0,这句话会切换到bat文件所在目录,所有相对路径就都不会迷路了。
6. 操作效率、权限边界与安全习惯
6.1 让命令行操作更快的几个操作习惯
Cmd窗口的日常效率其实被很多人忽视了。Tab键可以自动补全路径和文件名,按一次补全,连续按可以循环切换候选;上下方向键调出历史命令;F3复制上一条命令当前位置的内容;F7弹出历史命令列表,可以数字键选择执行。这几个键比重新敲一遍命令快得多。
在Win10/11的终端窗口里,复制粘贴的快捷键是Ctrl+Shift+C和Ctrl+Shift+V,但传统的cmd控制台窗口可能只支持右键粘贴。遇到快捷键没反应,先判断自己用的是传统conhost窗口还是新版Windows Terminal,两者快捷键不完全一致。
任何命令查帮助,统一在命令后加/?:
copy /? xcopy /? robocopy /?帮助信息里会有参数说明和示例,而且Cmd帮助里的示例往往比网上很多二手教程更准确。我遇到不确定参数时,第一件事从来不是搜索,而是先跑一遍/?。
doskey还能定义命令别名,比如:
doskey np=notepad $*之后输入np file.txt就会用记事本打开文件。这类似Linux里的alias,适合自己常用的命令。
cmd /c和cmd /k用来控制命令执行后窗口的去留:
cmd /c "ipconfig /all" cmd /k "chcp 65001"/c执行完自动关闭窗口,/k执行完保留窗口。写快捷方式或调用别的程序时,这两个开关很有用。
6.2 提权与权限边界
很多查询命令普通权限就能跑,但修改系统设置、安装驱动、操作服务就需要管理员权限。Cmd窗口标题栏显示“管理员”,说明当前会话已经提权。
快速以管理员身份打开Cmd,最稳的方式还是任务栏搜索“cmd”,右键选择“以管理员身份运行”;或者用Win + X组合键,在菜单里选择终端或命令提示符(管理员)。用普通用户控制台执行需要提权的命令,会直接炸出访问拒绝的报错。
命令行里的提权方式:
runas /user:Administrator cmd它会提示输入管理员密码,然后新开一个管理员Cmd窗口。适合当前用户不是管理员但知道管理员密码的情况。
判断自己当前是否具备管理员权限,用:
whoami /groups输出里能看到类似管理员组的信息。这个命令在脚本里还能用来做权限检查,如果权限不够,脚本可以主动提示用户以管理员身份重跑。
6.3 哪些危险命令需要格外谨慎
Cmd没有回收站,删除就是删除。这里列举几个需要敬畏的命令。
rd /s /q和rmdir /s /q静默递归删除整个目录树,目录内所有文件不会进入回收站。del /s /q同样静默递归删除多个文件。如果在脚本里配合错误的变量值,比如变量前缀为空导致路径变成根目录,后果不堪设想。
diskpart的clean命令会移除磁盘上的所有分区,没有二次确认,没有撤销机会。
fsutil file createnew创建大文件会把磁盘写满,在小分区上测试时尤其容易误伤系统盘。
负责任的做法是:删除类命令执行前先用dir /b或echo打印出实际要操作的对象,确认路径拼写;在批处理里对变量做非空校验,删除逻辑执行前再次提示确认;重要机器上宁可用 robocopy 的/l参数做“列出计划但不执行”的演练,也不要直接跑批量删除。
6.4 从Cmd到PowerShell:我不建议你二选一
很多新人纠结学Cmd还是直接学PowerShell,其实两者不矛盾。Cmd短平快,适合临时查询、批量小操作、写轻量脚本;PowerShell强在对象化输出、远程管理和更完整的语法体系。我见过一些老运维至今仍用Cmd处理日常,也见过新运维全程PowerShell,各有各的道理。
我的建议是先把Cmd命令的思维框架建好,再过渡到PowerShell时会非常顺。因为网络诊断的底层概念、文件复制逻辑、服务启停思路都是相通的,工具只是外层。Cmd命令积累起来的那套“怎么排查、怎么验证”的经验,迁移到任何脚本语言都不过时。
如果只让我留一个建议给读者:凡是删除类命令,不管看起来多简单,执行前一定先用echo或者dir把目标确认一遍。Cmd不会像GUI那样弹窗问“你确定吗”,回车按下去就是最终决定。记住这个习惯,你就能避开我见过的大多数命令行翻车事故。