前言正文
一、测试网络用的`ping`命令二、显示或隐藏文件的`attrib`命令三、删除文件无影无踪的`del`命令四、神奇的目录树`tree`命令五、说没就没的命令`taskkill`六、可爱的循环`for`命令七、打开程序的`start`命令八、CMD下切换目录`cd`命令九、创建文件夹的命令`md`十、操作注册表`reg`命令 前言
什么是CMD?它有什么用??如何使用???
Windows 命令提示符(cmd.exe)是 Windows NT 下的一个用于运行 Windows 控制面板程序或某些 DOS 程序的shell程序;或在 Windows CE 下只用于运行控制面板程序的外壳程序。 ——360百科
网上一打开,都是这种无聊的玩意儿:
在这些文章中,CMD失去了它本来的意义。
今天我来给大家分享10个有趣的CMD命令,在关键时刻都有重大的作用。
OK,开始吧。
正文
首先打开你的CMD:
Ctrl+Shift+Esc,呼出任务管理器。点击文件,点击运行新任务。输入cmd.exe,以管理员身份运行(可选,本文中不用使用管理员身份了)。一、测试网络用的ping命令
用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] [-R] [-S srcaddr] [-c compartment] [-p] [-4] [-6] target_name选项: -t Ping 指定的主机,直到停止。 若要查看统计信息并继续操作,请键入 Ctrl+Break; 若要停止,请键入 Ctrl+C。 -a 将地址解析为主机名。 -n count 要发送的回显请求数。 -l size 发送缓冲区大小。 -f 在数据包中设置“不分段”标记(仅适用于 IPv4)。 -i TTL 生存时间。 -v TOS 服务类型(仅适用于 IPv4。该设置已被弃用, 对 IP 标头中的服务类型字段没有任何 影响)。 -r count 记录计数跃点的路由(仅适用于 IPv4)。 -s count 计数跃点的时间戳(仅适用于 IPv4)。 -j host-list 与主机列表一起使用的松散源路由(仅适用于 IPv4)。 -k host-list 与主机列表一起使用的严格源路由(仅适用于 IPv4)。 -w timeout 等待每次回复的超时时间(毫秒)。 -R 同样使用路由标头测试反向路由(仅适用于 IPv6)。 根据 RFC 5095,已弃用此路由标头。 如果使用此标头,某些系统可能丢弃 回显请求。 -S srcaddr 要使用的源地址。 -c compartment 路由隔离舱标识符。 -p Ping Hyper-V 网络虚拟化提供程序地址。 -4 强制使用 IPv4。 -6 强制使用 IPv6。
我们可以使用它来测试网络是否可用,输入命令ping 网址。
也可以用于延时,但是不是那么精准。
C:Users86139>ping baidu.com /n 5正在 Ping baidu.com [220.181.38.251] 具有 32 字节的数据:来自 220.181.38.251 的回复: 字节=32 时间=11ms TTL=49来自 220.181.38.251 的回复: 字节=32 时间=11ms TTL=49来自 220.181.38.251 的回复: 字节=32 时间=11ms TTL=49来自 220.181.38.251 的回复: 字节=32 时间=11ms TTL=49来自 220.181.38.251 的回复: 字节=32 时间=11ms TTL=49220.181.38.251 的 Ping 统计信息: 数据包: 已发送 = 5,已接收 = 5,丢失 = 0 (0% 丢失),往返行程的估计时间(以毫秒为单位): 最短 = 11ms,最长 = 11ms,平均 = 11ms
二、显示或隐藏文件的attrib命令 这个东西我们不多说,只说两种用法。
好比我这里有个文件test.txt,里面有一些内容。我们如何隐藏它?
其实,我在cmd里面,输入了一行命令:attrib +s +h /s /d test.txt。+s的意思就是添加系统属性,+h添加隐藏属性。
但是这个文件并不是没有了,只需要再输入一行命令:attrib -s -h /s /d test.txt即可恢复。
这个我记得我以前讲过。这里有好多文件:
如何删除掉里面的exe文件呢?需要使用删除命令del /q /s /f *.exe。*是通配符,这句命令的意思就是删除所有匹配后缀为.exe的文件。同理,当我们想删除所有文件时,即可使用通配符*.*。
这个命令是这样使用的。
删除一个或多个文件。DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] namesERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names names 指定一个或多个文件或者目录列表。 通配符可用来删除多个文件。 如果指定了一个目录,该目录中的所 有文件都会被删除。 /P 删除每一个文件之前提示确认。 /F 强制删除只读文件。 /S 删除所有子目录中的指定的文件。 /Q 安静模式。删除全局通配符时,不要求确认 /A 根据属性选择要删除的文件 属性 R 只读文件 S 系统文件 H 隐藏文件 A 准备存档的文件 I 无内容索引文件 L 重新分析点 O 脱机文件 - 表示“否”的前缀如果命令扩展被启用,DEL 和 ERASE 更改如下:/S 开关的显示句法会颠倒,即只显示已经删除的文件,而不显示找不到的文件。
瞬间,.exe的文件都没了。
这个命令不要随便使用,因为它不会把删除的文件放入回收站,而是直接删除。
当你有足够的权限,您甚至可以干掉%windir%目录下的文件,但是您的电脑系统就废了。
老潘电脑课堂开课啦,随便瞎删电脑里的东西,多半是废了!
另外,这里还有一个奇妙的玩法,那就是del %0批处理自删除,效果如下:
这个东西不难,而且很实用,我以前的文章中展现目录树,就用的它。
以图形显示驱动器或路径的文件夹结构。TREE [drive:][path] [/F] [/A] /F 显示每个文件夹中文件的名称。 /A 使用 ASCII 字符,而不使用扩展字符。
我展开一个我的文件夹,各位请上演!
D:编程代码共享文件夹>tree /f卷 Data 的文件夹 PATH 列表卷序列号为 90AF-CB35D:.│ a8ab838aade1be7763e20d8a6e4cc85e9bda8b5ef2e29d4f9f2be38fefb37065.zip│ lframeCNDocs.zip│ NSudo_9.0_Preview1_9.0.2676.0.zip│├─battoexe│ Bat_To_Exe_Converter.exe│ settings│└─System Volume Information
嗯,这样展示很清楚的。
五、说没就没的命令taskkill我没说清,这个命令是让进程说没就没。
TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]描述: 使用该工具按照进程 ID (PID) 或映像名称终止任务。参数列表: /S system 指定要连接的远程系统。 /U [domain]user 指定应该在哪个用户上下文执行这个命令。 /P [password] 为提供的用户上下文指定密码。如果忽略,提示 输入。 /FI filter 应用筛选器以选择一组任务。 允许使用 "*"。例如,映像名称 eq acme* /PID processid 指定要终止的进程的 PID。 使用 TaskList 取得 PID。 /IM imagename 指定要终止的进程的映像名称。通配符 '*'可用来 指定所有任务或映像名称。 /T 终止指定的进程和由它启用的子进程。 /F 指定强制终止进程。 /? 显示帮助消息。筛选器: 筛选器名 有效运算符 有效值 ----------- --------------- ------------------------- STATUS eq, ne RUNNING | NOT RESPonDING | UNKNOWN IMAGENAME eq, ne 映像名称 PID eq, ne, gt, lt, ge, le PID 值 SESSION eq, ne, gt, lt, ge, le 会话编号。 CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为 hh:mm:ss。 hh - 时, mm - 分,ss - 秒 MEMUSAGE eq, ne, gt, lt, ge, le 内存使用量,单位为 KB USERNAME eq, ne 用户名,格式为 [domain]user MODULES eq, ne DLL 名称 SERVICES eq, ne 服务名称 WINDOWTITLE eq, ne 窗口标题 说明 ---- 1) 只有在应用筛选器的情况下,/IM 切换才能使用通配符 '*'。 2) 远程进程总是要强行 (/F) 终止。 3) 当指定远程机器时,不支持 "WINDOWTITLE" 和 "STATUS" 筛选器。例如: TASKKILL /IM notepad.exe TASKKILL /PID 1230 /PID 1241 /PID 1253 /T TASKKILL /F /IM cmd.exe /T TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*" TASKKILL /F /FI "USERNAME eq NT AUTHORITYSYSTEM" /IM notepad.exe TASKKILL /S system /U 域用户名 /FI "用户名 ne NT*" /IM * TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"
我们来试试。我现在写了一个弹窗。如何关闭?直接点叉就行。
当我们加了个死循环,效果就变了。点叉,关不完的。
这时候,我们可以使用命令taskkill /im python.exe /f,就关掉了。
成功: 已终止进程 "python.exe",其 PID 为 3440。
六、可爱的循环for命令这个大家都熟,谁都知道。
对一组文件中的每一个文件执行某个特定命令。FOR %variable IN (set) DO command [command-parameters] %variable 指定一个单一字母可替换的参数。 (set) 指定一个或一组文件。可以使用通配符。 command 指定对每个文件执行的命令。 command-parameters 为特定命令指定参数或命令行开关。在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.如果启用命令扩展,则会支持下列 FOR 命令的其他格式:FOR /D %variable IN (set) DO command [command-parameters] 如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] 检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。 如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符, 则枚举该目录树。FOR /L %variable IN (start,step,end) DO command [command-parameters] 该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列 1 2 3 4 5,(5,-1,1)将产生序列(5 4 3 2 1)FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]FOR /F ["options"] %variable IN ("string") DO command [command-parameters]FOR /F ["options"] %variable IN ('command') DO command [command-parameters] 或者,如果有 usebackq 选项:FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]FOR /F ["options"] %variable IN ("string") DO command [command-parameters]FOR /F ["options"] %variable IN ('command') DO command [command-parameters] fileset 为一个或多个文件名。继续到 fileset 中的下一个文件之前, 每份文件都被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字, 然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。 以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。 你可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个 或多个指定不同解析选项的关键字。这些关键字为: eol=c - 指一个行注释字符的结尾(就一个) skip=n - 指在文件开始时忽略的行数。 delims=xxx - 指分隔符集。这个替换了空格和制表符的 默认分隔符集。 tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代 的 for 本身。这会导致额外变量名称的分配。m-n 格式为一个范围。通过 nth 符号指定 mth。如果 符号字符串中的最后一个字符星号, 那么额外的变量将在最后一个符号解析之后 分配并接受行的保留文本。 usebackq - 指定新语法已在下类情况中使用: 在作为命令执行一个后引号的字符串并且一个单 引号字符为文字字符串命令并允许在 file-set 中使用双引号扩起文件名称。 某些范例可能有助:FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k 会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将 每行中的第二个和第三个符号传递给 for 函数体,用逗号和/或 空格分隔符号。请注意,此 for 函数体的语句引用 %i 来 获得第二个符号,引用 %j 来获得第三个符号,引用 %k 来获得第三个符号后的所有剩余符号。对于带有空格的文件 名,你需要用双引号将文件名括起来。为了用这种方式来使 用双引号,还需要使用 usebackq 选项,否则,双引号会 被理解成是用作定义某个要分析的字符串的。 %i 在 for 语句中显式声明,%j 和 %k 是通过 tokens= 选项隐式声明的。可以通过 tokens= 一行 指定最多 26 个符号,只要不试图声明一个高于字母 "z" 或 "Z" 的变量。请记住,FOR 变量是单一字母、分大小写和全局的变量; 而且,不能同时使用超过 52 个。 还可以在相邻字符串上使用 FOR /F 分析逻辑,方法是, 用单引号将括号之间的 file-set 括起来。这样,该字符 串会被当作一个文件中的一个单一输入行进行解析。 最后,可以用 FOR /F 命令来分析命令的输出。方法是,将 括号之间的 file-set 变成一个反括字符串。该字符串会 被当作命令行,传递到一个子 CMD.EXE,其输出会被捕获到 内存中,并被当作文件分析。如以下例子所示: FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i 会枚举当前环境中的环境变量名称。另外,FOR 变量参照的替换已被增强。你现在可以使用下列选项语法: %~I - 删除任何引号("),扩展 %I %~fI - 将 %I 扩展到一个完全合格的路径名 %~dI - 仅将 %I 扩展到一个驱动器号 %~pI - 仅将 %I 扩展到一个路径 %~nI - 仅将 %I 扩展到一个文件名 %~xI - 仅将 %I 扩展到一个文件扩展名 %~sI - 扩展的路径只含有短名 %~aI - 将 %I 扩展到文件的文件属性 %~tI - 将 %I 扩展到文件的日期/时间 %~zI - 将 %I 扩展到文件的大小 %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展 到找到的第一个完全合格的名称。如果环境变量名 未被定义,或者没有找到文件,此组合键会扩展到 空字符串可以组合修饰符来得到多重结果: %~dpI - 仅将 %I 扩展到一个驱动器号和路径 %~nxI - 仅将 %I 扩展到一个文件名和扩展名 %~fsI - 仅将 %I 扩展到一个带有短名的完整路径名 %~dp$PATH:I - 搜索列在路径环境变量的目录,并将 %I 扩展 到找到的第一个驱动器号和路径。 %~ftzaI - 将 %I 扩展到类似输出线路的 DIR在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名比较易读,而且避免与不分大小写的组合键混淆。
好长!我们只说类似于range()的循环。
格式(管理员模式下,请将%i替换为%%i)for /l %i in (开始的地方,步长step,结束的地方) do 命令,结束的时候会停止到前一项,如(1,1,10)的循环为1~9。
现在我们来创建一批C++文件,10个。
for /l %i in (1,1,10) do echo // Author:PanDaoxi>>%i.cpp
七、打开程序的start命令打开程序的操作想必大家都很明白咯。
启动一个单独的窗口以运行指定的程序或命令。START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] [/NODE
这个东西我们只介绍/min和/max。我们如何最小化打开程序?start /min cmd.exe & exit运行这行命令后,当前cmd会消失,然后在任务栏中最小化弹出一个新的cmd。
当我们最大化创建一个cmd进程,命令应该这么写:start /max cmd.exe。
显示当前目录名或改变当前目录。CHDIR [/D] [drive:][path]CHDIR [..]CD [/D] [drive:][path]CD [..] .、 指定要改成父目录。键入 CD drive: 显示指定驱动器中的当前目录。不带参数只键入 CD,则显示当前驱动器和目录。使用 /D 开关,除了改变驱动器的当前目录之外,还可改变当前驱动器。如果命令扩展被启用,CHDIR 会如下改变:当前的目录字符串会被转换成使用磁盘名上的大小写。所以,如果磁盘上的大小写如此,CD C:TEMP 会将当前目录设为C:Temp。CHDIR 命令不把空格当作分隔符,因此有可能将目录名改为一个带有空格但不带有引号的子目录名。例如: cd winntprofilesusernameprogramsstart menu与下列相同: cd "winntprofilesusernameprogramsstart menu"在扩展停用的情况下,你必须键入以上命令。
我这里有个文件夹tools,如何切换?cd 相对路径或绝对路径即可。cd tools即可进入该文件夹。
九、创建文件夹的命令mdemm,不要想歪了。
创建目录。MKDIR [drive:]pathMD [drive:]path如果命令扩展被启用,MKDIR 会如下改变:如果需要,MKDIR 会在路径中创建中级目录。例如: 假设 a 不存在,那么: mkdir abcd与: mkdir a chdir a mkdir b chdir b mkdir c chdir c mkdir d相同。如果扩展被停用,则需要键入 mkdir abcd。
如何套娃?我们来套一个吧。
文件夹套娃:创建文件夹,并进入文件夹,创建文件夹,并进入文件夹……如此循环。
我们来创建深度100的套娃文件夹:for /l %i in (1,1,100) do (md 第%i层&cd 第%i层)。
如何进入呢?大家自行思考一下。
for /l %i in (1,1,100) do cd 第%i层
十、操作注册表reg命令不要随便使用。只介绍这两个:
reg addreg delete
REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f] [/reg:32 | /reg:64] KeyName [\Machine]FullKey Machine 远程机器名 - 忽略默认到当前机器。远程机器上 只有 HKLM 和 HKU 可用。 FullKey ROOTKEYSubKey ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ] SubKey 所选 ROOTKEY 下注册表项的完整名称。 /v 所选项之下要添加的值名称。 /ve 为注册表项添加空白值名称(默认)。 /t RegKey 数据类型 [ REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ | REG_DWORD | REG_QWORD | REG_BINARY | REG_NONE ] 如果忽略,则采用 REG_SZ。 /s 指定一个在 REG_MULTI_SZ 数据字符串中用作分隔符的字符 如果忽略,则将 "" 用作分隔符。 /d 要分配给添加的注册表 ValueName 的数据。 /f 不用提示就强行覆盖现有注册表项。 /reg:32 指定应该使用 32 位注册表视图访问的注册表项。 /reg:64 指定应该使用 64 位注册表视图访问的注册表项。例如: REG ADD \ABCHKLMSoftwareMyCo 添加远程机器 ABC 上的一个注册表项 HKLMSoftwareMyCo REG ADD HKLMSoftwareMyCo /v Data /t REG_BINARY /d fe340ead 添加一个值(名称: Data,类型: REG_BINARY,数据: fe340ead) REG ADD HKLMSoftwareMyCo /v MRU /t REG_MULTI_SZ /d fax0mail 添加一个值(名称: MRU,类型: REG_MULTI_SZ,数据: fax0mail00) REG ADD HKLMSoftwareMyCo /v Path /t REG_EXPAND_SZ /d ^%systemroot^% 添加一个值(名称: Path,类型: REG_EXPAND_SZ,数据: %systemroot%) 注意: 在扩充字符串中使用插入符号 ( ^ )
REG DELETE KeyName [/v ValueName | /ve | /va] [/f] [/reg:32 | /reg:64] KeyName [\Machine]FullKey 远程机器名 - 如果省略,默认情况下将使用当前机器。 远程机器上只有 HKLM 和 HKU 可用。 FullKey ROOTKEYSubKey ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ] SubKey 所选 ROOTKEY 下面的注册表项的全名。 ValueName 所选项下面的要删除的值名称。 如果省略,则删除该项下面的所有子项和值。 /ve 删除空值名称的值(默认)。 /va 删除该项下面的所有值。 /f 不用提示,强制删除。 /reg:32 指定应使用 32 位注册表视图访问 注册表项。 /reg:64 指定应使用 64 位注册表视图访问 注册表项。示例: REG DELETE HKLMSoftwareMyCoMyAppTimeout 删除注册表项 Timeout 及其所有子项和值 REG DELETE \ZODIACHKLMSoftwareMyCo /v MTU 删除 ZODIAC 上的 MyCo 下面的注册表值 MTU
注册表不能随便修改,可能会导致系统不稳定。这里面有很多系统的设置,定期做备份,有些病毒通过修改注册表来禁用系统功能。我们来试一下用命令禁用任务管理器。
名称:DisableTaskmgr
类型:REG_DWORD
禁用:
reg add "HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesSystem" /v "DisableTaskMgr" /d 1 /t REG_DWORD /f
恢复:
reg delete "HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesSystem" /v "DisableTaskMgr"
手头没有虚拟机,就不演示了。运行后电脑的任务管理器将提示“任务管理器已被管理员禁用。”
更新:
现在有了虚拟机,我们来测试一下上面的程序: