1.内部命令和外部命令
cmd 命令 :内部命令和外部命令
内部命令 系统自带命令
dir
copy

外部命令 调用应用程序,可自由拓展
mstsc.exe(mstsc)远程连接
ping (ping.exe) 测试网络连通性
python 调用python程序
wget 下载工具,需从网上下载 wget for windows 复制到 windows 下面的system32 目录下,并修改系统变量才可以使用

2.cmd 基本命令

cd (切换目录)
cd /? 查看帮助文档
cd c:desktop 切换到桌面
cd .. 返回上一级目录
cd . 显示当前目录
cd / 切换到c 盘根目录
cd 盘符:位置(名称) 切换指定位置目录

dir (查看目录)
dir /? 查看帮助文档
dir /a 显示所有
dir /s 显示指定目录及子目录所有的文件
dir /b 只显示概要不显示具体信息
dir /ah 显示隐藏文件
dir /as 显示系统文件
dir /ar 显示只读文件
dir 盘符:位置(名称) 显示指定位置目录

md (创建目录)
md 盘符:位置(名称)

copy (浅拷贝)
copy 源文件路径 文件目的路径

xcopy (深拷贝)
xcopy 源文件路径 文件目的路径 /e 拷贝文件和文件夹(不加参数只拷贝文件,等于copy)

rename或ren (重命名)
rename 原文件名 目标文件名

del (删除文件、目录)
del 文件路径(文件名)

replace (替换文件)
replace /a 替换到目标目录不做更改 ,相当于复制
replace /s 替换文件的同时替换了内容

type (打印文件内容)
type 文件

自定义cmd界面
title 改变窗口标题
mode con cols=宽 lines=长 改变窗口大小
color 背景色编号 字体色编号 改变外观

set (定义变量)
set /? 查看帮助文档
set 查看系统所有变量
set name=xxx 定义变量
set name 查看定义的变量
set name= 废弃变量
set /a 算术运算
set /a var=n/m 定义变量
set /p 键盘输入,实现人机交互

setx (设置永久变量)
set PATH %path%; 路径

echo (打印)
echo 内容 打印指定内容
echo %var% 打印变量的值

cls (清屏操作)

rem (注释)

3.特殊字符
| 管道命令符 把管道符前面执行的结果作为管道符后面的参数来使用
|| 组合命令 || 前面与后面的命令满足其一即可当作执行成功
& 组合命令 当& 前面的命令执行失败了,后面的命令依然执行
&& 组合命令 执行可执行部分,不可执行则报错
( 命令1 & 命令2 & 命令3 ... (无论前面命令是否故障,照样执行后面)
命令1 && 命令2 && 命令3....(仅当前面命令成功时,才执行后面)
命令1 || 命令2 || 命令3.... (仅当前面命令失败时.才执行后面))

errorlevel 返回错误码 判断上级命令是否执行
echo %errorlevel% 打印出上一条命令执行失败返回的错误码
echo %errorlevel% 0 代表执行成功
echo %errorlevel% 9009 代表执行失败

4.通配符
? 代表单个字符

  • 代表全部字符

5.if 判断
if /? 查看帮助文档
if exist 对象 执行动作 else 执行动作
if not exist 对象 执行动作 else 执行动作
if exist 盘符:目录文件 执行动作 else 执行动作 判断某个盘下是否存在某个文件
if /i 字符串==字符串 执行动作 else 执行动作 比较字符串时忽略大小写区别

6.for 循环
for /? 查看帮助文档
for %variable in (set ) do command [command-parameters] 其中set 可以为数字或字母,字符间用空格分隔
for /l %variable in (start,step,end) do command [command-parameters] 相当于range,指定参数的范围
for /d %variable in (*/???/????) do command [command-parameters] 指定的目录匹配,但不匹配子目录和文件
for 盘符路径or null /r %variable in (*/???/????) do command [command-parameters] 匹配某个盘下面的指定目录或当前路径的文件
for /f [ options] %variable in (fileset) do command [command-parameters] 对指定文件进行操作
for /f 的解析详情 https://www.cnblogs.com/hinata-sen/p/7443007.html

对于/f options中的参数
delims代表分隔符集,"delims=" 忽略空格照常操作,"delims= "则是遇到空格就停止操作。默认以空格和Tab为分隔,用来分列。
skip代表跳行, skip=1指跳过第一行
tokens代表列,tokens=1,2, 指第一和第二列),如果需要将指定的两列打印或执行其他操作,do后面需要%variable和与%variable相邻的字母来接收返回的结果(如%a 和%b、%i和%j,而%a和%j不行)
eol=x代表忽略以x开头的行,相当于python字符串的startswith
usebackp 反执行,会将双引号里面的内容当作是文件,把单引号里面的内容当作命令(可忽略)

for /f %variable in (fileset) echo %variable 如果遇到空格,默认只打印空格之前的内容
for /f "delims=" %variable in (fileset) echo %variable 不管遇没到遇到空格,都打印全部内容
for /f "tokens=2-3/2,3 delims= " %variable in (fileset) echo %variable1 %variable2 打印第二列和第三列(delims以空格将文件的内容进行分隔,tokens拿分隔后的第二列和第三列,但%variable只能接受返回的第二列的结果,需要拿一个与%variable相邻的字母接收第三列的结果)
for /f "tokens=2,* delims= " %variable in (d:out.txt) do echo %variable1 %variable2 打印第二列和第二列之后的所有列(其中variable1接收第二列的结果,variable2接受剩下列的结果)

7.文件重定向

覆盖之前写入的内容

不会覆盖之前写入的内容,只会在之前的内容后面写入

< 从文件读取内容打印到屏幕
[command] 1>right.txt >2error.txt 捕捉错误到指定文件,会在指定路径生成两个文件,如果正确两个文件都不会有内容,如果错误第二个文件有错误提示

8.ping 命令
一台主机通过发送icmp报文到另外一台主机,如果另外一台主机收到之后就会回复源主机一个icmp报文,然后可根据报文回复时间来判断连通性和网络情况
-t 不停发数据包
-n 指定数据包数量
-l 指定数据包大小(字节)
-a 通过IP查看主机名
-w 设置超时时间

9.telnet 命令
查看某个端口是否可访问,前提是目标主机在控制面版的启用或关闭windows功能中开启改服务
telent ip地址/域名 端口号

10.netstat 命令
查看网络连接,包括tcp、udp等
-a 显示所有连接和侦听端口
-n 以数字的形式显示地址和端口号
-o 查看拥有的与每个连接关联的进程ID
netstat -ano |findstr 进程id 用于过滤出相关的连接信息
tasklist 列举任务进程
taskkill 杀死任务进程
taskkill /im 进程名 /f 强制杀死进程
taskmgr 打开任务管理器

11.net user 命令
lusrmgr.msc 打开本地计算机用户和组
net user (用户名) 查看本地用户,加用户名查看指定用户,不加显示全部
net user 用户名 密码 /add 添加用户
net user 用户名 /active:yes or no 是否激活启用用户
net user 用户名 /del 删除用户
net localgroup administrators 用户名 /add 将用户加入到管理员组
net localgroup administrators 用户名 /del 将用户移出管理员组

12.net share 命令
net share 查看共享
net share 共享盘名=盘符: 共享某个盘
net share 共享盘名 /del 删除共享盘
net view \主机名 查看特定主机的共享 (主机名用hostname 命令查看)

services.msc 查看本机的服务
net start 服务名 开启某服务 (服务名要加双引号)
net stop 服务名 关闭某服务 (服务名要加双引号)

13.netsh 命令及应用
以命令行的网络配置工具,可修改ip ,gateway ,dns
netsh dump 查看网络配置信息
int ip 进入配置IP的命令行
set address name=本地网络连接名(网卡名) source=static addr=xxx.xxx.xxx.xxx mask=xxx.xxx.xxx.xxx 设置静态IP
set address name=本地网络连接名(网卡名) source=dhcp 设置动态获取IP
set address name=本地网络连接名(网卡名) gateway=xxx.xxx.xxx.xxx gwmetric=1 设置网关和 默认网关的跃点数

netsh 应用
修复网络故障
netsh winsock reset 通过重置winsock目录来重新初始化网络环境(winsock是位于应用层的协议),有效解决因为软件冲突和病毒原因造成的参数错误问题
net int ip reset c:resetlog.txt 卸载重安装tcp/ip协议,使其恢复到初始化时的状态

获取本地wifi密码
netsh wlan show profiles 查看当前系统已经保存的网络
netsh wlan show profiles name=wifi名称 key=clear 查看指定wifi密码

打开/关闭防火墙
firewall.cpl 查看防火墙状态
netsh firewall set opmode mode=enable 打开防火墙
netsh firewall set opmode mode=disable 关闭防火墙

防止arp 欺骗
netsh i i show in找到指定Idx
netsh -c "i i" add neighbors 【Idx】 【IP地址】【mac地址】修改指定IP的mac

14.ipconfig
/?查看帮助文档
/all 查看所有网络连接情况
/release 释放ip (只能用于dhcp网卡)
/renew 重新获取ip (与/release 结合使用)
/flushdns 刷新dns

15.attrib
设置文件属性
type nul > filename 创建空文件
attrib filename 查看文件属性
attirb +参数 filename 设置文件的属性
attirb -参数 filename 清除文件的属性

参数 (可以添加/减少多个属性)
a 存档属性
r 只读属性
h 隐藏属性
s 系统文件属性

批处理开始
16.goto
goto part1 前往执行part1
exit 退出脚本

17.call
call 文件 调用程序 (相互调用的程序必须在同一目录或指定程序文件路径)

18.sort
sort 文件 对指定文件进行默认排序
sort /+n 文件 对指定文件进行从第n 个字符进行排序
sort /r 文件 对指定文件进行倒序排序
sort 文件 /o 文件路径+文件名 将文件重定向到指定路径和文件名

  1. 网络故障排查
  2. 127.0.0.1 查看本机TCP/IP协议是否正常

ping 网关 查看本机与网关通信是否正常
ping 百度 查看本机是否能够上网

20.磁盘
compmgmt.msc 打开磁盘管理界面

convert 改变文件系统(只能实现从性能低到性能高的转变,如fat到ntfs)
convert 盘符 /fs:文件系统 指定将某盘符的文件系统转化为指定的文件系统

diskpart 分区
diskpart 进入对应交互模式
list disk 列出磁盘数量
select disk 1 选择磁盘1
clean 格式化磁盘
create partition primary 创建主分区
format fs=ntfs quick lable="E:" 格式化磁盘文件系统为ntfs并且快速执行格式化,最后赋予e盘符

磁盘修复
chkdsk 修复因系统崩溃或意外关机引起的磁盘错误,不指定盘符则对全盘检索
chkdsk 指定盘符 /f 修复指定磁盘上的错误
chkdsk 指定盘符 /r 查找指定磁盘上的坏扇区并恢复可读信息

文件系统
windows :ntfs/fat/extfat
区别:单个文件最大限制,最大文件数量,分区最大容量

23sfc.系统修复
用于系统文件错误引起的系统故障修复
sfc /? 查看帮助文档
/scannow 扫描整个系统并尽可能修复
/verifyonly=文件路径 只扫描不修复,不指定某个文件则对整个系统进行操作
/scanfile=文件路径 扫描并修复指定文件

24.查看系统信息,激活操作系统
winver 查看系统信息
slmgr /dli 查看激活信息
slmgr /xpr 查看激活信息
slmgr /upk 卸载产品密钥
slmgr /ipk 指定密钥 安装产品密钥
slmgr /skms zh.us.to xxx 设置密钥管理服务计算机名
slmgr /ato 成功激活产品

25.注册表

26.start
在命令行打开一个程序,如盘符,文件,目录,网址,应用程序等(如果路径中包含空格,需要给路径添加一个双引号)

27.网络提速
组策略调整
1.打开管理模板--网络--Qos 数据包计划程序--限制可保留网络带宽--启用--调整为10%--完成(具体看效果)
2.刷新dns缓存 如果打开网页卡顿,页面解析缓慢,可通过命令行ipconfig /flushdns 刷新dns缓存来加快解析速度(有待验证)
3.设置tcp属性 命令行中输入netsh interface tcp show global 来查看tcp连接情况,如果接收窗口自动调节不是为normal状态,可通过命令行输入netsh interface tcp set global autotuninglevel=normal 来设置为正常状态(原理为接收窗口大小影响网络速度)

28.设置变量接收键盘输入,实现切换IP列表
@echo off
set /p var=请输入IP地址:
ping -n 4 %var%
pause >nul

29.批量找出特定后缀名的文件
for /r 目录路径 %i in (*.txt) do echo %i

30.死循环
%0 在执行操作后面加上%0代表死循环

31.隐藏文件或分区
attrib +h 文件 隐藏文件
diskpart --list disk--select disk (number)--detail disk --select partition (number) --detail partition--set id=12(隐藏)--set id=07(取消隐藏) 要选择磁盘号和分区号才能查看磁盘和分区的detail,而且查看选定的磁盘和分区不需要加磁盘号和分区号,只需要detail disk 或detail partition

32.临时提升管理员权限
runas /noprofile /user:hostnameadministrator cmd 不加载主机名为hostname 的用户配置信息,以超级管理员的身份打开cmd 窗口
runas /user:hostnameadministrator /sa “路径+程序” 以超级管理员的身份运行某个程序

33.IPC$
IPC$是共享命名管道的资源, 利用IPC$连接,连接着可以与目标主机建立空的连接而无需用户名与密码(前提是对方开启了IPC$共享)
相互命令
net use \IPipc$ "" /user:"" 建立空连接
net use \IPipc$ “用户名” /user:"密码" 建立非空连接
net use z: \IPc$ “密码”/user:"用户名" 映射默认共享,将对方的c盘映射给自己的z盘
net use \IPipc$ /del 删除一个ipc$连接
net use c: /del 删除映射的c盘

34.死亡之ping
ping -l 65500 目标地址 -t 给目标主机不停地发65500个字节的数据包

35.bat 转exe
bat to exe convertor 利用工具
winrar 压缩时添加exe后缀名,并打开高级解压,指定解压路径,解压时自动运行bat 文件
补充:
系统开机自启动路径
WIN10
%USERPROFILE%AppDataRoamingMicrosoftWindowsStart MenuProgramsStartup
WIN7
%USERPROFILE% [开始] 菜单 程序启动\

蓝屏炸弹
ntsd -c q -pn winlogon.exe

扰乱文件系统
assoc .exe=txtfile(assco .exe=exefile取消)

命令行窗口调整
mode con cols=30(长) lines=10(宽)


@echo off
:: 批处理中所谓的函数,是用标签定义功能充当的。支持参数的传递,类似脚本文件运行时命令行参数的传递。
::  函数返回值用标签作为变量名作为返回使用,用完标签名变量立即释放变量,避免后面同样需要调用该函数,引起返回值的混乱。
:: exit /b code  在标签定义中表示退出当前函数,并返回错误状态值code。在call调用完毕后,回到call调用处继续执行后续指令。
::               不带/b表示直接退出cmd环境。



:::::::::::::::::::::::::::::::Main Begin::::::::::::::::::::::::::::::::::::::::::::::
:Main
echo;欢迎进入批处理天地!
echo;
echo;加法运算开始.
set /p n1=请输入第一个数字:
set /p n2=请输入第二个数字:

call :IsDigital %n1%
set r1=%errorlevel%
call :IsDigital %n2%
set r2=%errorlevel%


if "%r1%"=="200" (
  if "%r2%"=="200" (
      call :Add %n1% %n2%
      call,echo;%n1%与%n2%之和为:%%Add%%
   ) else (echo;%n2%不是数字无法参与运算.)
) else (echo;%n1%不是数字无法参与计算.)

pause & exit
:::::::::::::::::::::::::::::::Main End::::::::::::::::::::::::::::::::::::::::::::::


:::::::::::::::::::::::::::::::Add Begin::::::::::::::::::::::::::::::::::::::::::
::   功能:两数相加。
:Add
::变量传递查看。
::echo;%*
set /a num1=%1
set /a num2=%2
set sum=
set /a sum=%num1% + %num2%
::echo;%num1% + %num2% = %sum%
::返回值用标签当作变量返回。
set /a add=%sum% &exit /b 0
:::::::::::::::::::::::::::::::Add End::::::::::::::::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::IsDigital Begin:::::::::::::::::::::::::::::::::::::::::::
::    功能:判断给入的字符是否是纯数字。
::        exitcode  200 表示成功,是数字。250 表示失败,不是数字。
:IsDigital
set "num=%1"
::情况一:数字字符串中含空格。
::set num=%num: =%
echo;%num%|findstr "^[0-9][0-9]*$" >nul && call,set IsDigital=%%num%%
if not defined IsDigital (echo;%num%不是数字. & exit /b 250) else (echo;%num%是纯数字. & exit /b 200)
:::::::::::::::::::::::::::::IsDigital End:::::::::::::::::::::::::::::::::::::::::::