Windows批处理
基本介绍
- batch file programming是微软操作系统自带的原生开发语言,不需要任何环境搭建就可以运行。
- 文件扩展名.bat。
- 使用cmd.exe执行。
- 使用内置命令和外置命令进行自动化操作。
- 内置命令
- 匹配规则删除文件
- 新建文件、日志
- 创建计算机病毒/捂脸
- 外部命令
- 安装软件后软件带的,如python等
- 基本程序
@echo off echo "hello world" pause
@echo off
是不输出描述,指这种D:\git\study-notes\WindowsBatch>
。cls
清屏- 注释
rem
或者::
- 不区分大小写
- 本级目录:
.
- 上级目录:
..
- 根目录:
\
- 文件路径都是反斜杠:
\
- 多看
/?
- 如果中文乱码,开头添加
chcp 65001
,代表UTF-8字符集936 GB2312 20127 US-ASCII 65001 UTF-8
运算
算术运算
加减乘除、取余,先括号,后乘除取余,最后加减。
命令模式
cmd中
set /a 1+3
文本模式
在.bat文件中:
@echo off
set /a var = 1+2*3
echo %var%
pause
var
为变量名,自定义
重定向运算
一个命令的结果移交给下一个命令,或保存到某个文件当中。
> <
覆盖内容,箭头方向为文件流方向
<< >>
追加内容
rem 覆盖
echo "hello world" > a.txt
rem 查看文件内容
type a.txt
rem 追加
echo "hello world" >> a.txt
type a.txt
多命令运算
一次多个命令
&&
与,前边一个命令错误,后边的不会执行
||
或,前边的即使执行失败,后边还会执行
管道运算
|
A|B
,A命令结果作为B命令的输入。
例:查找当前目录下的.txt文件
dir | find ".txt"
dir
的输出作为find
的输入
注意:powershell中用findstr
基本命令
命令格式
- 主命令、子命令、参数、操作
- 命令帮助信息`/?
- 详细帮助信息
help
接收参数
接受参数命令%num
参数占位符1%
、2%
等
@echo off
echo "hello world"
echo %1
echo %2
set /a var = %1 + %2
echo %var%
pause
个性化控制台
- 颜色
color
- 标题
title "strname"
时间
- 设置日期
date
- 查看日期
date /T
- 设置时间
time
- 查看时间time
/T
启动命令
start
start "title" 1.bat
启动新窗口并设置标题,再执行指令
start /b 1.bat
不会启动新窗口
调用其他.bat
call
@echo off
echo "hello world"
echo %1
echo %2
rem 计算
set /a var = %1 + %2
echo %var%
rem var可作为参数送入2.bat。1%也可以
call 2.bat var
pause
2.bat文件中
@echo off
echo %1
set /a var = %1 + 3
echo %var%
pause
任务列表查看命令
tasklist
查看本地或远程机器上的进程列表
tasklist /?
多看帮助
任务关闭
taskkill
按照进程ID或映像名称终止任务
文件夹结构查看命令
tree
关机命令
shutdown
shutdown /s
关闭计算机
shutdown /p
关闭计算机,无警告
shutdown /l
注销
shutdown /r
完全关闭并重启计算机
shutdown /t
关闭前的超时时间,单位秒,最大315360000(10年)
shutdown /i
显示关闭ui,不会关机,在ui操作
计划任务
at
at 22:00/every:M,T,W,Th,F,S,Su 命令路径
at
已弃用,推荐schtasks
环境变量
用环境变量代替复杂路径
set
查看环境变量
文件夹及文件命令
目录
dir
目录浏览,但不显示隐藏文件
mkdir
或md
创建目录
mkdir \a\b\c\d
在a中创建b,b中c,c中d
rmdir
或rd
删除目录(包括目录下的子目录和文件)
cd
本盘符下的目录切换,c盘切d盘直接输入d:
即可,不要用cd
cd \
切换至根目录
cd ..
切换至上级目录
ren "原名" "新名"
重命名文件
copy
目录复制
文件
del
删除文件
del .\*.txt
删除某路径下的所有.txt文件
move
文件剪切
网络相关命令
net user
用户操作
net localgroup
用户组操作,权限高
ping
连同命令,会发送ICMP数据包
talnet
有自己的控制端,用于网络主机管理
tracert
路由信息查看
ipconfig
IP配置信息
ARP
显示和修改地址解析协议(ARP)使用的(IP到物理)地址转换表
条件判断结构
@echo off
set var = hello
if %var% = hello (echo ok) else (echo no)
pause
exist
文件是否存在
循环结构
- 遍历目录
for /d %%名称 in 路径 do
只遍历目录(文件夹),不遍历文件
@echo off
rem 如果是当前目录下遍历的话,可以不写`.\*`,直接写`*`
for /d %%a in (.\*) do (
echo %%a
)
pause>nul
- 遍历目录和子目录下文件
for /r "目录路径" %%v in (匹配规则,如.cs) do
for /r "." %%v in (*.py) do(
echo %%v
)
- 遍历数字
for /L &&v in (start,step,end) do
for /l %%c in (1,1,10) do (
echo %%c
echo 1 > %%c.txt
)
- 遍历文件内容
for /f %%v in (文件名) do
按行遍历
for /f %%d in (.\11.txt) do (
if %%d == hello ( echo %%d ok ) else ( echo %%d no )
)
Virus脚本分析
- 目录重复代码分析
利用goto
语句重复新建(md
)
@echo off
rem :loop 为代码块
:loop
md virus
cd virus
goto loop
示例
获取计算机信息到指定文件
@echo off
echo. >log.txt
echo Log File >> log.txt
echo. >> log.txt
echo user %username% >> log.txt
data /t >> log.txt
time /t >> log.txt
echo. >> log.txt
echo process ran by %username% >> log.txt
echo . >> log.txt
tasklist >> log.txt
echo. >> log.txt
echo network activity >> log.txt
netstat -s >> log.txt
exit
交互操作
set /p 变量名=提示(可选)
用%变量名%来判断
,再根据判断结果goto
到程序块
@echo off
echo 1.a
echo 2.b
echo 3.c
echo 4.d
:input
set /p input=please input a number:
if %input%==1 (
echo a
goto a
) else if %input%==2 (
echo b
goto b
) else if %input%==3 (
echo c
goto c
) else if %input%==4 (
echo d
goto d
) else (
echo error
goto e
)
:a
echo do a ing....
pause
exit
:b
echo do b ing....
exit
:c
exit
echo do c ing....
:d
exit
echo do d ing....
:e
echo please input 1-4
goto input
计划执行
@echo off
rem 每分钟执行一次monitor.bat
schtasks /create /sc minute /mo 1 /tn monitor /tr D:\git\study-notes\WindowsBatch\monitor.bat
bat转exe
- bat to exe converter工具