Windows批处理

发布时间 2024-01-08 09:43:31作者: 张汉堡

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目录浏览,但不显示隐藏文件
mkdirmd创建目录
mkdir \a\b\c\d在a中创建b,b中c,c中d
rmdirrd删除目录(包括目录下的子目录和文件)
cd本盘符下的目录切换,c盘切d盘直接输入d:即可,不要用cd
cd \切换至根目录
cd ..切换至上级目录
ren "原名" "新名"重命名文件
copy目录复制

文件

del删除文件
del .\*.txt删除某路径下的所有.txt文件
move文件剪切

网络相关命令

net user用户操作
net localgroup用户组操作,权限高
ping连同命令,会发送ICMP数据包
talnet有自己的控制端,用于网络主机管理
tracert路由信息查看
ipconfigIP配置信息
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工具