Windows 系统是典型的可视化操作系统,除非你是程序员否则基本是用不到命令行的。而 Linux 是典型的命令行操作系统,一般使用命令行来使用 Linux 各种软件,虽然它也有可视化图形页面。
所以一般情况下:
- Linux下就要会 Shell 脚本。 (后台)
- Windows下用 DOS 的CMD 。(前端)
什么是DOS?
我们使用计算机接触最频繁的就是DOS。DOS是英文Disk Operating System的缩写,意思是“磁盘操作系统”,顾名思义,DOS主要是一种面向磁盘的系统软件,说得简单些,DOS就是人给机器下达命令的集合,是存储在操作系统中的命令集,有了DOS,我们就可以更容易理解怎么给机器下命令,不必去深入了解机器的硬件结构,也不必去死记硬背那些枯燥2进制数字的机器命令,只需通过一些接近于英语的DOS命令,我们就可以轻松地完成绝大多数的日常操作。另外,DOS还能有效地管理在它控制下的各种软硬件资源,对它们进行合理的调度,所有的软件和硬件都在DOS的监控和管理之下,有条不紊地进行着运转。
一、如何打开CMD?
win7 或者 XP 直接按 win 键,在弹出的窗口选择你要输入的程序,比如 cmd 然后按 enter 键就可以打开 cmd命令窗口了!但是win8这样做就不方便。
可以使用快捷键 win+R ,在左下角弹出一个窗口才是在 window 系统下最通用的做法,打开窗口后再输入 cmd 按 enter 键打开命令窗口。
二、内部命令和外部命令
首先在 cmd 命令输入 help,屏幕会列出一些命令,可以自己试试的玩。一般看到一个命令后,如果没有说明文档,你就尝试的在其命令后直接输入 -help 或者 /? 再或者一个随便什么的字符让它报错,一般情况下就会给出这个命令下相应的参数说明。试试吧!
还有就是要明白 CMD 分为内部命令和外部命令:
- 内部命令:move、copy、title等等。
- 外部命令可以从网上下载
xxx.exe
命令放进入C:\Windows\System32
文件里面,就可以在命令行里面使用,自带的有:ping 和 mstsc
等。另外如果你下载的xxx.exe
文件也可以放入自己指定得文件夹,不过得配置下环境变量。
三、深入命令行学习
3.1 shutdown
shutdown --help | more 分页查看说明
shutdown -s //默认一分钟后关机
shutdown -a//中止系统关闭
shutdown -t//将关闭前的超时时间设置为 xxx 秒。
3.2 start
start 可以打开文件、文件目录、exe程序等等。
start//不带任何参数,启动一个单独的CMD窗口
exit //关闭当前CMD窗口
start .\mini_app//打开文件夹
start \Windows\Notepad.exe//打开记事本
start \Windows\Notepad.exe ./mini_app/app.json//用记事本打开app.json文件
start /MAX \windows\notepad.exe//窗口最大化方式打开/MIN就是最小话方式打开
start www.baidu.com//默认浏览器打开网址
3.3 mode
配置CMD窗口大小
mode con: cols=60 lines=30
mode 60,30
//上面两种写法等效
3.4 title
设置命令提示窗口的窗口标题。
title CondorHero
3.5 color
设置默认的控制台前景和背景颜色。即设置CMD的背景色和字体颜色
color [背景色][前景色]
color 2//字体设置为蓝色
color F0 //背景为F亮白色,字体为0黑色
color //恢复默认值
3.6 cd
显示当前目录名或改变当前目录。
C:\Users\hpzhan\Desktop\test\pro>cd
C:\Users\hpzhan\Desktop\test\pro
//不带参数只键入 CD,则显示当前的目录
cd / //进入根盘符
cd .. //指定要改成父目录。
3.7 dir
显示目录中的文件和子目录列表。
dir /ar //a是全部,r只读
3.8 mkdir
创建目录。可以简写为 md
mkdir ./test //创建test目录。
md ./test //创建test目录。
3.9 echo 和 type
C:\Users\hpzhan\Desktop\test\pro>echo 你好
你好
echo 我是文件里面的内容 > 1.txt //往文件里面增加内容,可以借此来新建一个文件
type 1.txt//显示文本文件的内容。
通过type 还可以创建一个空文件 type nul > c.txt
,通过attrib还可以设置文件属性:
C:\Users\hpzhan\Desktop\test\pro>attrib c.txt
A C:\Users\hpzhan\Desktop\test\pro\c.txt
C:\Users\hpzhan\Desktop\test\pro>attrib +s c.txt
C:\Users\hpzhan\Desktop\test\pro>attrib c.txt
A S C:\Users\hpzhan\Desktop\test\pro\c.txt
C:\Users\hpzhan\Desktop\test\pro>attrib -s c.txt
C:\Users\hpzhan\Desktop\test\pro>attrib c.txt
A C:\Users\hpzhan\Desktop\test\pro\c.txt
如果 CMD 窗口显示中文乱码那是因为字符编码不匹配,一般 CMD 默认当前页编码为:936——简体中文,我们需要通过命令行修改为(65001)UTF-8模式。
chcp 65001 //change current page
3.10 copy、xcopy 、del、rename、move、replace
copy from.txt traget.txt//将一份或多份文件复制到另一个位置。
xcopy //复制文件夹 默认/S
/S 复制目录和子目录,不包括空目录。
/E 复制目录和子目录,包括空目录。
del //删除一个或多个文件。
/S 删除所有子目录中的指定的文件。
/Q 安静模式。删除全局通配符时,不要求确认
rename //重命名文件或文件夹可简写为ren。
move//移动文件并重命名文件和目录。
replace //替换文件。
/A 把新文件加入目标目录。不能和/S 或 /U 命令行开关搭配使用。
/P 替换文件或加入源文件之前会先提示你进行确认。
/S 替换目标目录中所有子目录的文件。不能与 /A 命令开关搭配使用。
3.11 set 显示、设置或删除 cmd.exe 环境变量。
要显示当前环境变量,键入不带参数的 set。
如何定义一个变量:
set : 显示所有环境变量
set name=CondorHero :设置一个临时(只在当前CMD窗口有用)name变量,值为CondorHero
set name : 显示name的值
echo %var% : 引用变量的值
set name= : 删除name变量
案例如下:
C:\Users\hpzhan\Desktop\test\pro>set name=CondorHero
C:\Users\hpzhan\Desktop\test\pro>set name
name=CondorHero
C:\Users\hpzhan\Desktop\test\pro>echo %name%
CondorHero
C:\Users\hpzhan\Desktop\test\pro>set name=
C:\Users\hpzhan\Desktop\test\pro>set name
环境变量 name 没有定义
利用 set 进行简单的运算:
C:\Users\hpzhan\Desktop\test\pro>set /a result=8*8
64
C:\Users\hpzhan\Desktop\test\pro>echo %result%
64
接收用户输入,可以做一些人机交互:
C:\Users\hpzhan\Desktop\test\pro>set /p result=请输入一个数字
请输入一个数字90
C:\Users\hpzhan\Desktop\test\pro>echo %result%
90
命令行形式设置环境变量,nodeJs、python等使用CMD的时候会用到:
setx PATH "%path%;文件路径" //设置环境变量
3.12 批处理(.bat文件)
每次都输入CMD命令太过麻烦,对于类似得操作可以使用批处理,即新建 xxx.bat 文件,windows下可直接打开运行。我们现在先看一个案例求一个数得立方,demo.bat:
@echo off
chcp 65001
set /p num=求一个数的立方,请输入一个数:
set /a result=%num%*%num%
echo 计算结果显示:%num%的立方为%result%
echo 文件已经成功执行,请按任意键退出!
pause >nu
动图演示:
一些代码说明:
@echo off
关闭回显
@echo on
打开回显
若要显示当前回显设置,请键入不带参数的 echo
C:\Users\hpzhan\Desktop\test\pro>echo
ECHO 处于打开状态。
@echo off并不是DOS程序中的,而是DOS批处理中的。当年的DOS,所有操作都用键盘命令来完成,
当你每次都要输入相同的命令时,可以把这么多命令存为一个批处理,从此以后,只要运行这个批处理,
就相当于打了几行、几十行命令。
DOS在运行批处理文件时,会依次执行批处理中的每条命令,
并且会在显示器上显示,如果你不想让它们显示,可以加一个"echo off"语句,但是"echo off"也是命令,
它本身也会显示,如果连这条也不显示,就在前面加个"@","@"是用来关闭具体某一条命令不在显示器上显示。
pause 就是暂停命令,执行时会在命令行窗口显示"请按任意键继续. . ."并等待你按键。
pause > nul 的作用也是暂停,区别是不显示"请按任意键继续. . ."这些字,nul相当于空文件,把这些文字隐去了
,什么也不显示,同样是等待你按任意键退出。此往往用于批处理,自己用echo命令自定义显示提示信息,例如:
echo 文件已经成功执行,请按任意键退出!
判断文件或文件夹是否相等 if exit
判断两个字符串是否相等 if "字符串1" == "字符串2"
判断某个变量是否被赋值 if defined var
判断两个数值是否相等 if 数值1 equ 数值2
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
现在来实现一个计算器源码如下:
@echo off
chcp 65001
echo 加减乘除计算器!
echo 输入格式: a + b
rem 注释符号。
set /p num1=请输入一个操作数:
rem 这里必须空一 行,上下不能挨着否则出错
set /p operator=请输入操作符(+、-、*、/):
set /p num2=请输入另一个操作数:
if %operator% == + (
set /a result = %num1% + %num2%
)
if %operator% == - (
set /a result = %num1% - %num2%
)
if %operator% == * (
set /a result = %num1% * %num2%
)
if %operator% == / (
set /a result = %num1% / %num2%
)
echo 最后得计算结果显示:%num1% %operator% %num2% = %result%
echo 文件已经成功执行,请按任意键退出!
pause >nu
代码动图演示:
3.13 find和findstr
find
find 文件名 ,目录下查找某文件。
findstr
查找文件里面的字符串。
C:\Users\hpzhan\Desktop\test\pro>type search.txt
惠普
爱情公寓1
abc
123
爱情公寓2
爱情公寓5
decgt3
C:\Users\hpzhan\Desktop\test\pro>find "爱" search.txt
---------- SEARCH.TXT
爱情公寓1
爱情公寓2
爱情公寓5
C:\Users\hpzhan\Desktop\test\pro>findstr "爱" search.txt
爱情公寓1
爱情公寓2
爱情公寓5
四、特殊字符
主要特殊字符:
@ 隐藏命令的回显。
%使用两个%包含一个字符串表示引用环境变量
| 命令管道符 当前一个命令的结果作为后一个命令的参数来使用
dir | find "s"
查找当前显示的目录中带s得文件夹
& 命令连接字符 比如我要在一行文本上同时执行两个命令,就可以用&命令连接这两个命令
&& 组合命令 当前一个命令失败时,后一个命令就不会再执行了
|| 组合命令 如果前一个命令执行成功,后面的命令就不执行了。如果前一个命令失败,才执行后一个命令
() 命令包含或者是具有优先权的界定符
: 标签定位符,可以接受goto命令所指向的标签。比如在批处理文件里面定义了一个":begin"标签,用"goto :begin"命令就可以转到":begin"标签后面来执行批处理命令了。可跳过一些语句
> 和 >> 以及 < 命令都是重定向操作符,> 直接内容覆盖,>> 直接追加内容,右边的内容输出到左边,例如sort /r < error.txt 倒叙输出 error.txt的内容
默认错误信息,在命令行显示,我们可以通过2把错误信息写入文件
C:\Users\hpzhan\Desktop\test\pro>ir 2> error.txt
?通配任意一个字符
??通配任意两个字符
*代表任意个任意字符
案例使用:
@echo off
chcp 65001
rem 一起输出123
echo 1 & echo 2 & echo 3
rem 上面的语句等价下面这句,都是一条语句输出结果
(
echo 1
echo 2
echo 3
)
goto :begin
echo 我被跳过
:begin
echo 哈哈
pause > nul
输出结果:
Active code page: 65001
1
2
3
1
2
3
哈哈
注意
|
&
&&
||
之间完全可以混着用
五、for 循环
- 命令行输出
C:\Users\hpzhan>for %i in (a,b,c,d) do echo %i
C:\Users\hpzhan>echo a
a
C:\Users\hpzhan>echo b
b
C:\Users\hpzhan>echo c
c
C:\Users\hpzhan>echo d
d
- 脚本输出
上面的 for 循环如果直接放到脚本里面不能执行,变量必须是双百分号:
@echo off
for %%i in (a,b,c,d) do echo %%i
pause > nul
结果:
a
b
c
d
限免演示一个特别有用的功能,批量创建和修改文件名:
@echo off
chcp 65001
for /L %%i in (0,1,100) do (mkdir %%i && echo 第%%i个文件创建成功)
/f
的应用:
@echo off
chcp 65001
type c.txt
rem c.txt文件的原内容如下所示:
rem 1 2 3
rem 4 5 6
rem 7 8 9
echo ☆☆☆☆☆☆
echo ——————————
rem /f中delims根据定义的符号,负责切分字符串,比如delims=空格 就是根据空格来切分字符串。
rem 如果/f后面不加参数的话,delims的默认也是空格
for /f "delims= " %%i in (./c.txt) do (echo %%i)
rem 输出
rem 1
rem 4
rem 7
rem 另外"delims="等于号之后什么也不加表示原样输出
echo ------------
rem tokens 表示输出几列,后面需要新增对应的变量接收
for /f "tokens=1,2 delims= " %%i in (./c.txt) do echo %%i %%j
echo ============
rem skip指在文件开始时忽略的行数
for /f "skip=1 tokens=1,2 delims=:" %%i in (./c.txt) do (echo %%i)
pause > nul
输出结果:
Active code page: 65001
1 2 3
4 5 6
7 8 9☆☆☆☆☆☆
——————————
1
4
7
------------
1 2
4 5
7 8
============
4 5 6
7 8 9
/d
和/r
的应用:
rem 匹配当前目录下所有的文件
for %%i in (*) do (echo %%i)
rem /d配置当前目录下所有的目录和文件
for /d %%i in (*) do (echo %%i)
rem /r 提取某目录下所有的.txt文件的路径
for /r D:\ %%i in (*.txt) do (echo %%i)
六、网络相关
ping www.baidu.com//查看域名对应的IP和网络是否畅通
telnet需要在=>控制面板\程序\程序和功能\启用或关闭windows功能\打开 Telnet Client功能
telnet www.baidu.com 80//查看端口占用情况
netstat显示协议统计信息和当前 TCP/IP 网络连接。常用参数为:
-a 显示所有连接和侦听端口。
-n 以数字形式显示地址和端口号。
-o 显示拥有的与每个连接关联的进程 ID。
通常用来寻找端口号,配合taskmgr和tasklist以及taskkill来使用
netsh重要的要命
netsh(Network Shell) 是一个windows系统本身提供的功能强大的网络配置命令行工具,可以用来修改IP,网关及DNS和查看无线网络的密码。
备份网络配置
netsh dump > backup_network.txt
设置静态IP
set address name="本地连接" source=static addr=192.168.2.1 mask=255.255.255.0
设置自动获取IP
set address name="本地连接" source=dhcp
设置其他网关DNS等
set address name="本地连接" gateway=192.168.0.1 gwmetric=0
firewall.cpl//打开防火墙
查看无线网
netsh wlan show profile
所有用户配置文件 : Tenda_405DC8
查看无线网密码
netsh wlan show profile name=WIFI名 key=clear//clear明文显示密码
SSID 名称 :“Tenda_405DC8”
关键内容 : 123456789
查看激活操作系统slmgr命令
slmgr是Software LicenseManger的简称,是Windows软件授权管理工具。slmgr是管理系统激活和密钥、证书的主要组件。slmgr的所有功能都是通过slmgr.vbs提供的,采用VBScript命令行方式执行。
winver//关于windows
查看激活信息 slmgr /xpr || slmgr /dli
卸载产品密钥 slmgr /upk upk是 uninstall product key 的简写
安装产品密钥 slmgr /ipk 6NMRW-2C8FM-D24W7-TQWMY-CWH2D
设置密钥管理服务器 slmgr /skms kms.v0v.bid
激活Windows slmgr /ato
这个激活原理请看,讲的非常的好:https://v0v.bid/kms.html
七、实用技能
ping 命令它是用来检查网络是否通畅或者网络连接速度的命令,后面是IP或者是网址!程序员常用来查询域名是否解析成功。
控制台命令窗口中一些技巧:win7 控制台不能用 ctrl+v/c,但是 win10是可以的,win7复制粘贴只能如下操作:
复制内容:右键弹出快捷菜单,选择“标记(K)”,然后选中所需复制的内容,然后右键即可
粘贴内容:右键弹出快捷菜单,选择“粘贴(P)”在文件夹空白处按住Shift,然后右键弹出快捷菜单,可以看到“在此处打开命令行窗口”
使用上下方向键,翻看使用过的命令
进入计算机某个盘符例如 D 盘,
D:
回车查看本机 ip 命令为: ipconfig
清除屏幕 cls
Tab键补全
Tracert(跟踪路由)是路由跟踪实用程序
tracert www.baidu.com
系统快捷键:
快捷键 | 功能 |
---|---|
win+E | 打开文件管器 |
backspace | 在文件管理器里面返回 |
win+D | 显示/隐藏桌面 |
win+L | 锁计算机 |
alt+F4 | 关闭当前程序 |
ctrl+shift+Esc | 打开任务管理器(或者ctrl+alt+delete) |
ctrl+F | 在一个文本或者网页里面查找,相当实用(退出一般按ESC) |
ctrl+A | 选中所有文本 |
win+B | 选中桌面右下方托盘栏应用,打开最小化的微信最好用 |
win+. | windows自带的表情符号👍😘 |
Win+X | win10唤起开始按钮右键菜单 |
Win+ 向上 | 键最大化窗口 |
Win+ 向左 | 键将窗口左移 |
Win+ 向右 | 键将窗口右移 |
Win+ 向下 | 键最小化窗口 |
浏览器:
功能 | 快捷键 |
---|---|
关闭当前的标签页或弹出式窗口 | Ctrl + w 或 Ctrl + F4 |
按标签页的关闭顺序重新打开先前关闭的标签页 | Ctrl + Shift + t |
打开新的标签页,并跳转到该标签页 | Ctrl + t |
打开新窗口 | Ctrl + n |
在无痕模式下打开新窗口 | Ctrl + Shift + n |
跳转到下一个打开的标签页 | Ctrl + Tab 或 Ctrl + PgDn |
跳转到上一个打开的标签页 | Ctrl + Shift + Tab 或 Ctrl + PgUp |
跳转到特定标签页 | Ctrl + 1 到 Ctrl + 8 |
跳转到最后一个标签页 | Ctrl + 9 |
打开当前标签页浏览记录中记录的上一个页面 | Alt + 向左箭头键 |
打开当前标签页浏览记录中记录的下一个页面 | Alt + 向右箭头键 |
切换 DevTools 的面板 | ctrl + [ 和 ctrl + ] |
切换 DevTools 窗口的展示布局 | ctrl + shift + D |
显示或隐藏书签栏 | Ctrl + Shift + b |
在新标签页中打开“历史记录”页 | Ctrl + h |
在新标签页中打开“下载内容”页 | Ctrl + j |
打开查找栏搜索当前网页 | Ctrl + f 或 F3 |
跳转到与查找栏中搜索字词相匹配的下一条内容 | Ctrl + g |
跳转到与查找栏中搜索字词相匹配的上一条内容 | Ctrl + Shift + g |
跳转到地址栏 | Ctrl + l 或 Alt + d 或 F6 |
停止加载网页 | Esc |
在新窗口中打开链接 | 按住 Shift 键的同时点击链接 |
在新的后台标签页中打开链接 | 按住 Ctrl 键的同时点击链接 |
打开链接,并跳转到该链接 | 按住 Ctrl + Shift 键的同时点击链 |