在日常的系统维护和部署工作里,我经常被同事问到:“这些东西你在图形界面里点几下不就完了吗,为什么非要敲命令?”其实Windows的图形界面确实做得越来越友好,但很多底层操作、故障排查和批处理场景,图形界面根本给不了你足够的控制力。这台机器蓝屏进不去系统了,那台服务器只能开远程端口,新机器要批量改网络配置——这些时候,唯一能救你的就是命令行。
这篇文章要聊的就是最基础、但也最常用的DOS命令。我不会给你罗列一个一百多个命令的字典,那没有意义。我会按照实际工作场景,把真正用得上的命令拆开来讲,讲它们的用途、参数、常见坑和我的使用习惯。无论你是刚接触命令行的新手,还是平时只靠图形界面干活的运维,这篇文章都能让你少走不少弯路。内容围绕Windows环境下的CMD终端展开,但所有思路同样适用于PowerShell——你只要知道命令之间的对应关系就行。
1. 先搞清楚:你敲的是什么
很多人把“DOS命令”和“CMD”混为一谈,这其实是两回事。DOS是一个完整的操作系统,早在图形界面普及之前就存在了,那个时代的人开机就是黑底白字的命令行界面。而我们今天在Windows里打开的命令行窗口,本质上是CMD这个终端程序,它模拟了DOS时代的命令交互环境,但内核是32位或64位的Windows程序。
在CMD窗口里执行的大部分命令,其实并不是CMD自带的,而是Windows系统目录下一个个独立的可执行文件。比如你敲ping,系统会在环境变量指定的路径下找到ping.exe然后运行它。只有少数命令是CMD解释器内置的,比如dir、cd、copy,这些不需要外部程序支持。
搞清楚这个区别有什么实际意义?当你在一个纯净的PE环境里恢复系统时,你依赖的就是一批系统自带的工具,比如diskpart、sfc、dism。而当你自己写批处理脚本时,你要知道哪些命令是通用的、哪些依赖具体系统环境。我见过有人在脚本里用tree命令遍历文件夹,结果发现对方用的是精简版系统,tree.exe根本没装,整个脚本就中断了。所以了解命令的本质,比背命令列表有用得多。
再说一个重要的基础概念:命令解释器的工作流程。你按下回车的那一瞬间,CMD会先检查你输入的是不是内部命令,如果不是,它会在当前目录找有没有对应的可执行文件,找不到再去环境变量Path指定的目录里去搜。这就解释了为什么有时候你在某个文件夹里执行命令会提示“不是内部或外部命令”——因为那个文件只存在于别的地方,而你没有把路径加进Path变量。
所以在开始学具体命令之前,我建议你先打开CMD窗口,输入where cmd看命令解释器在哪个目录,输入echo %Path%看看系统当前的环境变量路径。这个习惯会让你更明白命令的查找顺序,遇到“命令找不到”的报错时也更容易定位问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 网络通讯三件套:ping 与 ipconfig 的实战用法
网络不通是第一大故障,而排查网络的第一条命令永远是ping。大多数人都用过,但多数人只会ping 某个地址然后看通不通。实战中你要会用它的参数来定位问题到底出在哪一层。
先看最基础的用法。ping www.某网站.com通了,说明从你的机器到对方的域名解析、路由可达性、对方防火墙策略都没问题。不通的时候,不要急着断言“网断了”,要一步步缩小范围。
第一步,ping 127.0.0.1检查本机网卡协议栈是否正常。这个地址是回环地址,数据包不会出网卡,只在本机内部转一圈。如果这个都不通,说明TCP/IP协议栈坏了,重装网卡驱动或者重置协议栈。
第二步,ping 本机IP,确认自己的网卡和IP配置是否正常。这里有个经验:如果你的机器开了防火墙,ping 本机IP有时会被拦下来,反而给了你错误提示。排查时可以先临时关掉防火墙再测,测完记得恢复。
第三步,ping 网关IP。通了说明本机到局域网出口没问题,不通说明物理链路、交换机端口或者VLAN配置有问题。我遇到过很多次网线没插紧导致时通时断的情况,就是靠连续ping 网关 -t长时间测试暴露出来的。
第四步,ping 外部IP(比如公共DNS服务器地址)。通了说明你的机器可以访问外网,问题大概率出在DNS解析;不通说明路由或者运营商链路存在问题。
这四步走下来,网络问题就被切割开来了。这比图形界面里到处乱点高效得多。
ping的常用参数我提醒两个。一个是-t,持续ping直到你按Ctrl+C手动停止,适合长时间监控链路稳定性。一个是-a,反向解析IP对应的主机名,适合当你只拿到一个IP却想知道对方是谁的时候。另外ping -l 65500曾经被用来发起死亡之ping攻击,这个参数现在主要是测试大数据包传输能力,正常人很少用到。
接着是ipconfig,别只盯着IP地址看。ipconfig /all能输出完整的网络配置信息,包括物理地址、DHCP状态、租约过期时间、DNS服务器列表。真正排查问题时,这些信息比IP地址本身更重要。
常见的坑有两个。一个是DHCP租约问题,机器莫名其妙断网但重启就好了,这个很可能就是租约冲突或过期。你可以用ipconfig /release释放当前租约,再用ipconfig /renew重新获取,这两步能解决大量DHCP相关的诡异问题。
另一个是DNS缓存污染。你在浏览器里能登录社交平台但所有网页都打不开,或者在地址栏输入正确的网址却跳到一些你不认识的站点,这些都很可能是DNS缓存出了问题。执行ipconfig /displaydns看看缓存了哪些解析记录,再用ipconfig /flushdns清空DNS缓存,很多网页打不开的问题就解决了。
我再顺便提一个排查链路质量的命令pathping。它是ping和tracert的结合体,先探测到达目标的每一跳路由,再对每一跳发一定数量的数据包做质量统计。如果你需要量化“哪一段链路丢包严重”,这个命令比单纯的tracert更直观。
还有一个容易被忽略的命令是nslookup。系统自带的DNS查询工具,输入nslookup 域名就能查出该域名解析到的IP。进阶用法是切换DNS服务器查询:nslookup 域名 8.8.8.8,这在对比不同DNS服务器的解析结果时特别有用。比如你在某台机器上访问一个网站不正常,但你确认别的机器正常,拿nslookup对比一下你机器用的DNS和别的机器用的DNS,差异就一目了然了。
3. 磁盘分区与系统修复:diskpart 的完整操作
diskpart是Windows里少有的让我又爱又怕的命令。爱它,是因为它的功能极其强大,可以在命令行里完成磁盘分区、格式化、挂载、卸载、转换分区表格式等所有操作;怕它,是因为它没有任何确认机制,误操作会直接干掉整个磁盘的数据,而且不可撤销。
先讲它的基本用法。在CMD窗口输入diskpart回车,就进入了它自己的交互环境,提示符会变成DISKPART>。先用list disk查看当前机器上有哪些磁盘。输出会显示磁盘编号、大小和可用空间。从这些信息里确认你要操作的磁盘,千万别搞错。
选磁盘用select disk 0,这里的0就是list disk里显示的磁盘编号。然后list partition看这台磁盘上有哪些分区。如果你想彻底清空磁盘重建分区,一条clean命令就足够了。这条命令会把磁盘上的所有分区表信息清空,所有数据仿佛人间蒸发。所以执行之前一定要确认磁盘编号是对的,最好连磁盘型号和容量都核对一遍。
clean之后的任务通常是创建新分区。create partition primary size=102400会创建一个大小102400MB(即100GB)的主分区。size参数单位是MB,注意别漏了。不写size参数则用掉全部剩余空间。选刚建好的分区select partition 1,然后format fs=ntfs quick快速格式化为NTFS文件系统。
format命令有几个细节值得展开讲。fs=参数指定文件系统格式,现代Windows建议NTFS,但如果是要做U盘或者兼容老设备,你要用FAT32或者exFAT。需要特别注意的是FAT32单文件不能超过4GB,而exFAT没有这个限制,适合做大文件传输盘。quick参数代表快速格式化,不检查坏道;不带这个参数是完整格式化,耗时很长,但能扫描磁盘表面错误。新建的分区不要着急格式化,先分配一个盘符:assign letter=E,否则你会发现资源管理器里看不到这个分区。
除了基础的磁盘分区操作,diskpart还有一个典型应用场景——重装系统时转换分区表格式。新机器用UEFI引导就必须是GPT分区表,老机器用Legacy引导则是MBR,如果你的系统安装程序报错“无法在GPT磁盘上安装Windows”,那就是分区表格式不对。用diskpart先clean清空磁盘,然后convert gpt或者convert mbr转换格式,就可以回去继续安装了。
还有一类实用场景是做U盘启动盘。很多人以为必须靠第三方工具才能制作引导U盘,其实diskpart配合系统镜像就够了,原理是把U盘格式化为可引导分区结构,再把系统文件复制进去。操作思路是:U盘插入后,list disk找到U盘对应的磁盘号(看容量大小判断),select disk选它,clean清空数据,create partition primary创建主分区,active激活这个分区(标记为可引导),format fs=ntfs quick格式化,assign letter=盘符分配盘符,然后你把系统镜像里的文件全部复制到U盘就行。这样做的U盘在支持UEFI启动的机器上通常都能直接引导安装。
使用diskpart我有两个习惯动作。第一个是在关键操作前用detail disk查看当前磁盘的详细信息,包括磁盘ID、型号、总线类型等,多重确认身份。第二个是每做一步操作就截图或者记录,因为交互环境里没有办法回滚,出错了只能重新来过。还有一点,diskpart在PE环境和正常的Windows环境下都可以用,PE下使用时要留意磁盘驱动器号和原先不同,不要拿原来的盘符想当然。
4. 扫描与修复系统文件:sfc 和 DISM 的正确顺序
Windows系统文件损坏造成的故障,表现形式千奇百怪:某个功能模块报错、应用频繁闪退、系统更新装不上、CPU异常占用。很多人第一反应是重装系统,其实多数情况下系统文件是可以修复的,关键是工具用得对、顺序不能乱。
sfc /scannow是最常用的系统文件扫描工具。它会把系统核心文件和系统缓存中的副本对比,发现不一致时用缓存副本修复。但很多人在使用sfc时没发现文件损坏了,原因是这个工具只检查已经安装的系统文件,对于那些文件索引缺失或者组件存储本身已经损坏的情况,sfc是无能为力的。
所以更有效的做法是:先跑DISM修复系统镜像和组件存储,再跑sfc扫描系统文件。这个顺序很多人不知道,我特意强调了。
DISM(部署映像服务和管理)是一套功能强大的命令行工具,用于维护Windows映像和系统组件。执行DISM /Online /Cleanup-Image /RestoreHealth,它就会检测并修复系统映像中的问题。/Online表示操作当前正在运行的系统,/Cleanup-Image指清理修复映像组件,/RestoreHealth是核心参数,会从Windows更新下载需要的健康文件来替换损坏的文件。整个修复过程可能需要十几分钟到半小时不等,期间可能通过网络下载一些文件,保持网络畅通就好。
如果你跟不上这两条命令的顺序,我讲个直观的例子:想象sfc是一个装修师傅,他在检查你房子里的墙面有没有开裂;DISM负责的是墙里面的水管电线有没有问题。如果水电都坏了,装修师傅把墙皮补得再光鲜,过两天依然会出问题。反过来先把水电修好,再让师傅检查墙面才有意义。
还有一个进阶参数值得掌握:DISM /Online /Cleanup-Image /RestoreHealth /Source:E:\sources\install.wim。/Source参数指定修复文件的来源,可以是Windows安装镜像里的install.wim,也可以是一个已经共享的Windows目录。它的好处在于不依赖网络,在无法联网或者公司内网环境里特别有用。先说这个命令怎么生成,具体是mount你下载的安装镜像文件,从E:\sources\install.wim路径提取文件。
当你执行完DISM /RestoreHealth之后,先重启电脑,再执行sfc /scannow。这时的sfc才能可靠地完成它的工作。扫出来修复不了的个别文件,记录下来,因为有些文件是第三方软件替换过的,系统修复工具当然不会还原它们。这就涉及到一句话的判断:如果重启之后问题依旧,检查你记录的这些文件,用原版程序覆盖安装基本能解决。
日常使用中我还习惯把这两条命令都写进批处理脚本里,一键执行。脚本内容很简单,就是按顺序跑DISM和SFC,输出日志到文件。这样给公司几十台电脑做巡检的时候,不用一台一台手动敲命令。批处理文件的写法后面会展开讲,这里先留个钩子。
5. 目录与文件的精准操作
dir是我们最早接触的命令之一,用来看目录内容。很多新手觉得它没什么技术含量,但当你需要在大目录里定位一个文件时,dir就显出威力了。比如你要在C盘的Windows目录下找一个特定的配置文件,直接dir C:\Windows /s /b,/s参数会递归所有子目录,/b参数只显示完整路径而不显示其他信息,结果就清爽地列出全部文件路径。在此基础上如果你记得文件名的一部分,比如只知道文件包含system关键字,就写dir C:\Windows /s /b | findstr system,先用管道把目录输出给findstr,findstr按关键字过滤出你需要的行。这套组合在定位文件时比资源管理器的搜索功能快得多。
findstr值得单独拿出来说,它本质上是一个命令行文本搜索工具,和Linux下的grep对应,支持正则表达式,在分析日志文件时是无价之宝。比如你想知道某个服务在今天的日志里有没有报错,执行findstr /i "error" C:\logs\app.log。/i是不区分大小写,提高命中率。如果你要精确匹配整行、排除关键词或者匹配多个关键词,用/x、/v、/c:参数达到目的。日志分析是运维工作中频率最高的场景之一,findstr配合type和more,能应对大多数情况。
文件查看方面,type 文件名可以把整份文件内容全部输出到屏幕上。如果文件很长,内容瞬间滚出屏幕根本来不及看,你可以在命令最后加一个| more,分页显示,按回车一行一行往下看,按空格翻页。不过坦白说,日常工作中我更习惯用记事本或者专用编辑器看日志文件,type的优势主要是在批处理脚本里把日志片段输出给其他命令处理时,方便完成自动化。
删除文件是del命令的职责。del 文件名.txt删除当前目录的单个文件;del *.tmp删除所有tmp后缀的临时文件,注意*是通配符,会匹配任意文件名。这里我必须提醒一个非常关键的坑:在CMD中执行del *.*配合/s参数使用时,会递归删除当前目录和所有子目录里的全部文件,威力极大,千万确认好目录再执行。另外当某个文件被占用无法删除时,命令行里的del会直接提示权限错误,而不会像资源管理器那样弹出窗口等你去点“重试”,这其实算是优点——你立刻明白是哪个进程占用了文件,接下来去任务管理器定位那个进程就好。
复制和移动文件,copy和move是最稳妥的组合。copy有两个在批处理场景里非常高频率的参数:/y和/v。/y表示覆盖目标文件时不需要逐个确认,否则每次都会停下来问你是否覆盖,脚本里就卡住了;/v是校验复制后文件和源文件是否一致,虽然会慢一些,但涉及重要数据时值得开。move看名字就知道是移动,它有一个脚本场景常用的特性:不同盘符之间移动文件时,系统内部会自动完成复制和删除两个步骤,你只需要执行一次move即可完成最终效果。
重命名文件用ren 原文件名.txt 新文件名.txt。注意如果目标是带路径的,要确保文件不在当前目录时路径写全,否则会提示找不到文件。批量重命名的时候,ren配合通配符可以一次操作大量文件,比如ren *.jpg *.png这种看起来像是改扩展名的操作,实际是修改文件主名而保留原扩展名,具体行为有时候确实让人意外。我建议批量重命名前先在临时目录里小范围试一下,验证效果再对正式目录执行。
6. 一台机器的体检:从 systeminfo 到进程管理
不管你是接手一台陌生电脑,还是排查一台运行速度很慢的机器,先收集系统信息是首要步骤。systeminfo是一条被低估的命令,它能一次性输出操作系统版本、系统类型、处理器型号、物理内存总量、虚拟内存设置、网卡信息、已安装的系统补丁列表、系统安装日期、系统运行时间等大量信息。
日常使用中利用率最高的信息有两个。第一个是系统运行时间:你通过systeminfo | findstr "系统启动时间"(注意中文系统输出是汉字,英文系统则是System Boot Time)快速查看它运行了多久,很多性能问题都出在长期不重启、内存资源得不到释放上。第二个是系统补丁列表,公司内网要做安全合规检查时,写脚本调用systeminfo收集各机器的补丁情况,工作效率比一台台点开“设置—更新记录”高一个量级。
进程管理是排查卡顿、CPU飙高、内存溢出问题的核心环节。图形界面的任务管理器在进程假死时经常打不开,这时候就该命令行出场了。tasklist列出当前所有进程,默认显示映像名称、进程ID、内存占用。参数/fi可以按条件过滤,比如tasklist /fi "memusage gt 50000000"过滤出内存占用超过50MB的进程。
当你看到某个进程占用了极高内存却不知道它是干什么的,可以看它的完整路径来识别真伪。直接的办法是wmic process where name="可疑进程.exe" get ExecutablePath,输出这个进程对应的可执行文件的完整路径。如果路径里是系统目录(C:\Windows\System32),那大概率是正经系统进程;如果在随便什么临时目录或用户目录里,就需要警惕,这很可能是伪装进程。
确认之后要杀掉占用资源的进程:taskkill /pid 进程ID /f。/pid指定进程ID,/f强制结束运行的程序,带这个参数可以跳过一些进程的询问或者清理来确保终止。/t参数会把该进程派生出来的子进程一并结束,但在使用时要理解风险:杀进程和它派生的子进程可能导致未保存的数据全部丢失。
我还想提一个命令组合tasklist /svc的输出,它会显示每个进程后面跟随对应的系统服务名称。当你排查“某个进程占用80端口”这种问题时,这个组合能直接帮你对号入座找到服务,再结合netstat -ano | findstr :80找出端口对应的PID,流程非常丝滑。netstat是网络状态查询的经典命令,能显示当前系统的所有网络连接、监听端口和对应进程ID,它值得单独开一节来讲。
7. 端口与网络连接排查:netstat 工具详解
netstat是我排查网络问题时使用频率最高的命令之一。默认不带任何参数时,它列出当前所有活动网络连接,包括本地地址、外部地址和状态。但这远远不够,它真正的威力在于组合参数。
netstat -ano是我的常用起手式。-a显示所有连接和监听端口,-n以数字形式显示地址和端口(不做反向解析,速度快很多),-o显示每个连接所属的进程ID。这个组合可以让你直接看到一个端口被哪个进程占用,是排查端口冲突的关键。
常见的端口冲突场景就是开发环境里的端口占用。某个服务启动时报错“端口被占用”,大多数人去任务管理器一个个找进程,其实用netstat -ano | findstr :8080直接过滤出8080端口对应的PID,再用tasklist /fi "pid eq 那个PID"看到底是哪个进程,最后taskkill /pid 那个PID /f结束它。三步走完,端口立刻释放。这三条命令的组合值得每个开发者刻进肌肉记忆。
监听状态的连接类型也要会看。netstat -ano | findstr LISTENING筛选所有正在监听等待连接的端口。系统刚启动时有很多不明的进程监听端口,我们可以用它来排查可疑进程或者查找某个软件开放了不该开放的端口。排查服务器时,重点关注哪些端口对外暴露,配合防火墙规则判断是否应该开放这些端口。
netstat -an | findstr "ESTABLISHED"筛选当前已建立的连接,在排查是否存在异常连接时很有用。比如你怀疑机器中了挖矿木马,它会和矿池服务器建立TCP连接,你在这个输出里看到一个持续的ESTABLISHED连接指向一个奇怪的IP,结合该IP的归属,判断是否需要切掉这个连接、结束对应的进程。
-s参数可以按协议显示详细的统计信息,包括TCP连接数、UDP等协议的收发数据量、丢包率。配合-e参数显示网卡接口级别的统计信息。这些数据在局域网质量分析或者排查“为什么这台机器网速特别慢”时特别有价值——打开统计信息看丢包次数,如果丢包率一直居高不下,那物理链路出问题的概率就很大了。
netstat在Linux下也有对应版本,参数大体兼容,所以习惯在Windows上用它的人,到Linux服务器上也能直接上手,这是它比图形界面工具更有价值的原因之一——技能是可迁移的。
8. 批处理思维:用脚本替代重复劳动
单条命令解决单点问题,批处理解决的是重复问题。写脚本的能力是命令行技能从入门到熟练的分水岭。批处理的基本文件是.bat或.cmd,内容就是一行行命令,按顺序执行。看起来简单,但真正能写好需要一些关键细节。
先看一个收集系统信息的脚本示例。新建一个文本文件,写进以下内容:
batch复制@echo off
echo 正在收集系统信息...
systeminfo > %COMPUTERNAME%_info.txt
ipconfig /all >> %COMPUTERNAME%_info.txt
netstat -ano >> %COMPUTERNAME%_info.txt
echo 完成。
pause
逐行解释。@echo off关闭命令回显,让脚本执行时不逐行显示命令本身,只显示输出内容。>重定向符号,把系统信息输出到文件;>>是追加符号,把内容追加到已有文件末尾,不会覆盖前面的内容。%COMPUTERNAME%是系统内置的环境变量,代表当前计算机名。pause让窗口停在“请按任意键继续”,防止执行完毕后窗口关闭看不到结果。
这里有个初学比较难掌握的命令是for循环。比如你有一堆文本文件,要在每个文件末尾追加一行版权声明。用图形界面需要一个个打开编辑,脚本里是这样:
batch复制@echo off
for %%f in (*.txt) do (
echo 追加内容 >> %%f
)
echo 全部处理完成。
echo 按任意键退出。
pause > nul
%%f是循环变量,在批处理中变量前要两个百分号(在命令行直接输入则用一个百分号)。in (*.txt)指定匹配所有文本文件。do后面括号里是每次循环要执行的命令。这个能力让你可以对批量目标执行同样的操作,本质和Linux下的脚本逻辑是一致的。
批处理脚本里有一类常用的choice命令,用于交互式选择。比如运行脚本后根据用户输入决定执行哪个分支,这在公司内网的多操作菜单里很实用:
batch复制@echo off
echo 请选择要执行的操作:
echo 1. 清理临时文件
echo 2. 查看网络配置
echo 3. 退出
choice /c 123 /m "请选择:"
if errorlevel 3 goto end
if errorlevel 2 goto network
if errorlevel 1 goto clean
:clean
del %TEMP%\*.* /q
echo 临时文件清理完成。
goto end
:network
ipconfig /all
goto end
:end
pause
关于choice和if errorlevel,一个容易踩的坑是判断顺序:errorlevel的判断要从大到小,3的判断放在前面、2的放中间、1的放最后,因为if errorlevel 2表示“错误码大于等于2”都成立。如果顺序写反,选1永远会先命中2的分支。
还有一点,写批处理脚本时最好统一用英文路径变量,比如%TEMP%这种系统变量。中文路径虽然能跑,但在不同代码页(不同语言区域设置)的机器上执行时,容易出现乱码和路径识别问题。公司内网机要是装了英文版系统,中文路径多半会出问题。
写脚本的时间成本看起来高,但当你有一百台机器要处理时,一台台手工操作的代价远高于写脚本。我见过很多同事明明做的是运维,却一直在重复手工点鼠标,那个效率差距是非常大的。
9. 安全操作习惯与命令组合经验
命令行用久了,最大的收获不是记住的命令数量,而是操作习惯。
第一,永远确认命令的目标路径。特别是有破坏性的命令(del、format、diskpart clean),执行之前打dir看一下目录内容,确认没有放错地方。我在工作时见过有人清理垃圾文件时误删了同事的整个项目目录,就因为脚本里的通配符写得太宽,匹配到了不应该删的文件夹。这种错误一旦发生,就算有回收站也无济于事。
第二,重定向输出是日志管理的基本操作。任何批量执行的任务,不管成功失败,把结果输出到日志文件里,方便事后追查。日志文件名带上日期,比如info_%date:~0,4%%date:~5,2%%date:~8,2%.log,这个写法可以把系统当前日期拼进文件名,生成info_20250214.log这种格式。脚本执行留下的日志,对排查问题是不可替代的线索。
第三,管道和重定向的搭配要熟练。|把左边命令的输出作为右边命令的输入,>把输出重定向到文件,>>追加内容到文件尾。这两种机制相当于命令行世界的胶水,把一个个独立命令串联成能完成一个完整任务的工作链。排查问题时我经常写这样的命令:ipconfig /all | findstr "IPv4",过滤出关键信息;netstat -ano | findstr "8080",精准定位占用端口的进程。
第四,随时查阅命令帮助。任何命令后面加/?或者help,就会显示该命令的具体用法和所有参数说明。我不建议去背参数表,而是需要时快速查。用多了,常用参数自然记在肌肉里。比如你不确定xcopy具体有哪几个参数可以用,直接输xcopy /?翻到说明即可。这个习惯比记忆深刻得多,因为命令参数太多了。
第五,命令执行失败时的提示信息要认真看。绝大多数命令在失败时都会告诉你原因:找不到文件、参数错误、权限不足、文件被占用。这些提示通常已经足以定位问题。不要一看到报错就紧张,读一遍说明文字,大多数时候答案就在那行英文里。
拿一个我处理过的具体问题结尾吧。有段时间公司某台机器每次开机后C盘可用空间都会减少几个GB,但找不到具体是哪些文件占用了空间。我先用powercfg /h off关闭休眠文件(休眠文件本身占用了好几个GB),然后通过dir配合/s参数统计各目录大小,定位到大体积目录,再定位到是某个日志文件无限增长导致的。一步步排查下来,问题解决得干净利落,全程没有打开任何图形窗口。这大概就是我坚持使用命令行的原因——当你能用一条条命令精确控制系统时,遇到的问题都不是问题。
