跳至主要內容

Bat

TenSoFlow...大约 13 分钟脚本Bat

Bat

Bat脚本(Batch Script,也叫批处理脚本)是windows系统下一种以.bat.cmd为扩展名的脚本文件,用于自动化执行一系列命令。是基于Windows命令行(CMD)的一种脚本语言。

CMD(命令提示符)

cd 切换目录

主要用于显示或切换当前目录

// 不带参数时会显示当前所在的工作目录
cd

// 返回上一级目录
cd ..

// 返回根目录
cd \

// 切换盘符直接用盘符名加:
D:

// /d 表示同时切换盘符和目录
cd /d D:\Desktop

dir 查看目录

dir [路径] [参数]
路径:要查看的目录(默认是当前目录)
参数:控制输出格式、显示内容等

// 查看当前目录内容
dir

// 查看指定目录内容
dir D:\Desktop

// 分页显示(按空格翻页)
dir /p

// 宽列表显示(多列排列)
dir /w

// 显示所有文件(包含隐藏、系统文件)
dir /a

// 按名称排序
dir /o:n

// 按时间倒序排序
dir /o:-d

// 显示子目录下所有文件(递归)
dir /s

// 简洁模式(只显示文件名,适合导出)
dir /b

// 组合参数:显示所有文件 + 递归子目录 + 分页
dir /a /s /p

// 查找当前目录及子目录下所有 txt 文件
dir /s *.txt

// 导出目录下的文件名到 list.txt
dir D:\Desktop /b > list.txt

cls 清屏

// 清空屏幕内容
cls

exit 退出

// 退出
exit

netstat 网络状态查看

PID(Process ID)进程编号。每个正在运行的程序(进程)在操作系统中都会分配一个唯一的PID用来标识它、

// 查看某个端口是谁占用了
netstat -ano | findstr 8080

// 显示所有连接和监听端口
netstat -a

// 常用组合命令: 查询端口占用 + 找出具体进程 + 杀进程
netstat -ano | findstr 8080 // 查询端口占用
tasklist | findstr [PID]    // 找出具体进程
taskkill /PID 18456 /F      // 杀死PID为18456的进程

Bat命令

@echo off 标配开头

@echo off 是批处理脚本的标配开头,核心作用是关闭脚本执行过程中所有命令的回显(即不显示要执行的命令本身,只显示命令的执行结果),让控制台输出更整洁、易读。

(1)关闭回显

@echo off
chcp 65001 > nul
:: Empty
echo tensoflow
pause

执行效果

tensoflow
请按任意键继续. . .

(2)开启回显

:: Empty
chcp 65001 > nul
echo tensoflow
pause

执行效果

D:\Desktop>echo tensoflow
tensoflow

D:\Desktop>pause
请按任意键继续. . .

chcp 切换字符编码

是Windows控制台(CMD)中用于切换/查看字符编码的核心命令,也是解决处理中文乱码的关键。

小贴士

永久解决Bat文件中文乱码问题可以保存时选择ANSI编码。

(1)查看当前代码页

@echo off
chcp
pause

执行效果

活动代码页: 936
请按任意键继续. . .

936 是 GBK/GB2312 编码的代码页编号,也是中文 Windows 的默认值。

(2)切换代码页

@echo off
rem 切换到UTF-8 > nul屏蔽切换提示
chcp 65001 > nul
echo 切换后编码:
chcp
pause

执行效果

切换后编码:
Active code page: 65001
请按任意键继续. . .

:: 标签注释

:: 并不是批处理官方定义的注释命令,而是标签的特殊写法(标签以 : 开头,用于 goto 跳转),但因为 :: 不符合标签的命名规则(标签不能以第二个 : 开头),所以解释器会忽略这一行,从而起到注释的效果。

(1)基础使用

@echo off
:: 这是一行注释,不会被执行
echo tensoflow
pause

执行效果

tensoflow
请按任意键继续. . .

注意

::注释不能在 if/for 等块内使用
不能在命令行末尾使用。

rem 标准注释

官方标准的注释命令是rem(全称remark意为"备注")。

(1)基础使用

@echo off
rem 这是一行注释,不会被执行
echo tensoflow
pause

执行效果

tensoflow
请按任意键继续. . .

注意

rem注释能在 if/for 等块内使用
不能在命令行末尾使用。

echo 打印

在控制台窗口中输出文本、变量值、或控制批处理的命令回显功能,简单来说就是打印内容。

(1) 输出普通文本

@echo off
echo 你好,这是echo命令的基础用法
pause

执行效果

你好,这是echo命令的基础用法
请按任意键继续. . .

pause 暂停

pause 命令的主要功能是暂停批处理脚本的执行,并在控制台窗口中显示提示信息,等待用户按下任意键后,脚本才会继续执行后续命令。

(1)基础使用

@echo off
echo 这是执行 pause 前的内容
pause
echo 这是按下任意键后才会显示的内容
pause

执行效果

这是执行 pause 前的内容
请按任意键继续. . .(按下任意键后)
这是按下任意键后才会显示的内容
请按任意键继续. . .

start 运行

运行某个目录下的某一文件

语法

start /d [目录路径] [可执行文件名称]

(1)标准启动

@echo off

rem 第一个""里面是窗口标题,不填时表示为空
rem 第一个""不填都不要省略,因为Bat是按照空格分隔的如果程序路径含空格就会解析路径失败。
start "" "D:\TenSoFlow\Projects\Java_Exe\Reminder\RunReminder\Reminder.exe"

执行效果

会运行D:\TenSoFlow\Projects\Java_Exe\Reminder\RunReminder目录下的Reminder.exe文件

(2)/d 参数启动

@echo off
start /d "D:\TenSoFlow\Projects\Java_Exe\Reminder\RunReminder" Reminder.exe

执行效果

会运行D:\TenSoFlow\Projects\Java_Exe\Reminder\RunReminder目录下的Reminder.exe文件

set 设置变量

语法

# = 前后不能有空格否则空格会被计入变量名/值
set 变量名=变量值

(1)定义/修改自定义变量

@echo off
:: 定义普通变量
set name=tensoflow
set age=18
set address=梦想国度

:: 修改变量值(直接重新赋值即可)
set age=23

:: 输出变量(用%变量名%包裹)
echo 姓名:%name%
echo 年龄:%age%
echo 地址:%address%
pause

执行效果

姓名:tensoflow
年龄:23
地址:梦想国度
请按任意键继续. . .

(2)查看所有变量(系统 + 自定义)

@echo off
echo 所有变量列表:
echo ----------------
set
echo ----------------
pause

执行效果

会显示 PATHUSERNAMETEMP 等系统变量,以及你自定义的 nameage 等变量

(3)查看指定变量

@echo off
set name=张三
set name1=李四
rem 查看所有以name开头的变量
set name
pause

执行效果

name=张三
name1=李四
请按任意键继续. . .

(4)接收用户输入

@echo off
rem 接收用户输入的姓名和年龄
set /p username=请输入你的姓名:
set /p userage=请输入你的年龄:
rem 输出用户输入的内容
echo 你好,%username%!你的年龄是%userage%岁。
pause

执行效果

请输入你的姓名:tensoflow
请输入你的年龄:18
你好,tensoflow!你的年龄是18岁。
请按任意键继续. . .

(5)set /a 数值计算

@echo off
set num1=10
set num2=3

:: 加法
set /a sum=%num1%+%num2%
:: 减法
set /a sub=%num1%-%num2%
:: 乘法
set /a mul=%num1%*%num2%
:: 除法(取整)
set /a div=%num1%/%num2%
:: 取模(余数)
set /a mod=%num1%%%num2%

echo 10+3=%sum%
echo 10-3=%sub%
echo 10*3=%mul%
echo 10/3=%div%
echo 10%%3=%mod%

set count=0
:: 自增1
set /a count+=1
echo 自增后:%count%
:: 自减1
set /a count-=1
echo 自减后:%count%

pause

执行效果

10+3=13
10-3=7
10*3=30
10/3=3
10%3=1
自增后:1
自减后:0
请按任意键继续. . .

(6)字符串拼接

@echo off
set prefix=Hello
set suffix=World
:: 拼接1:变量+文本
set str1=%prefix%_2025
:: 拼接2:变量+变量
set str2=%prefix% %suffix%

:: 输出 Hello_2025
echo str1=%str1%
:: 输出 Hello World
echo str2=%str2%  
pause

执行效果

str1=Hello_2025
str2=Hello World
请按任意键继续. . .

(7)字符串截取

@echo off
:: 长度为11的字符串
set str=abcdefghijk

:: 截取前3个字符(位置0,长度3) 输出 abc
echo 前3个字符:%str:~0,3%
:: 截取从第5个字符开始到末尾(位置4,不写长度)输出 efghijk
echo 从第5个字符开始:%str:~4%  
:: 截取最后3个字符(起始位置-3,不写长度)输出 ijk
echo 最后3个字符:%str:~-3%
:: 截取从开头到倒数第2个字符(起始0,长度-2)输出 abcdefghi
echo 到倒数第2个字符:%str:~0,-2%
pause

执行效果

前3个字符:abc
从第5个字符开始:efghijk
最后3个字符:ijk
到倒数第2个字符:abcdefghi
请按任意键继续. . .

(8)字符串替换

@echo off
set path=D:\test\old_folder\file.txt

:: 替换文件夹名称(old_folder → new_folder)
set new_path=%path:old_folder=new_folder%

:: 输出 D:\test\new_folder\file.txt
echo 替换后:%new_path%

:: 删除所有反斜杠(\)
set no_slash=%path:\=%

:: 输出 D:testold_folderfile.txt
echo 无反斜杠:%no_slash%

pause

执行效果

替换后:D:\test\new_folder\file.txt
无反斜杠:D:testold_folderfile.txt
请按任意键继续. . .

if 条件判断

if命令用于根据指定条件是否成立,决定执行不同的命令。

基础语法

# 单条件判断
if 条件 (
    条件成立时执行的命令
)

# 双条件判断
if 条件 (
    条件成立时执行的命令
) else (
    条件不成立时执行的命令
)

# 多条件判断
if 条件1 (
    条件1成立时执行
) else if 条件2 (
    条件2成立时执行
) else (
    所有条件都不成立时执行
)

(1)字符串比较

运算符含义示例
==等于if "%str1%"=="abc"
neq不等于if "%str1%" neq "abc"

(2)数值比较

运算符含义示例
equ等于if %num% equ 10
neq不等于if %num% neq 10
gtr大于if %num% gtr 10
geq大于等于if %num% geq 10
lss小于if %num% lss 10
leq小于等于if %num% leq 10

(3)文件存在性判断

语法含义示例
if exist 路径判断文件 / 目录是否存在if exist test.txt
if not exist 路径判断文件 / 目录是否不存在if not exist test_folder

for 循环

基础语法

for %%变量名 in (遍历对象) do (
    对每个遍历对象执行的命令
)

(1)基础使用

@echo off
echo 遍历字符串列表:
echo ----------------
:: 遍历括号内的字符串(用空格分隔多个元素)
for %%i in (苹果 香蕉 橙子 葡萄) do (
    echo 水果:%%i
)
pause

执行效果

遍历字符串列表:
----------------
水果:苹果
水果:香蕉
水果:橙子
水果:葡萄
请按任意键继续. . .

goto 跳转

goto命令用于跳转到脚本中指定标签(Label)位置,执行标签后的代码,而跳过标签之前(跳转点之后)的代码。

(1)基础使用

@echo off
set /p opt=请选择操作(1-执行功能A,2-执行功能B):

:: 根据输入跳转
if "%opt%"=="1" goto funcA
if "%opt%"=="2" goto funcB
:: 若输入无效,跳转到错误提示
goto error

:: 功能A标签
:funcA
echo 你选择了功能A,正在执行...
echo 功能A执行完成!
:: 执行完跳转到脚本结束,避免执行其他标签
goto end

:: 功能B标签
:funcB
echo 你选择了功能B,正在执行...
echo 功能B执行完成!
:: 跳过错误提示
goto end

:: 错误提示标签
:error
echo 输入无效,请选择1或2!
goto end  :: 跳转到结束

:: 脚本结束标签
:end
echo 脚本执行完毕。
pause

执行效果

请选择操作(1-执行功能A,2-执行功能B):1
你选择了功能A,正在执行...
功能A执行完成!
脚本执行完毕。
请按任意键继续. . .

title 窗口标题

title用于设置当前CMD控制台窗口的标题栏文本。

(1)基础使用

@echo off
:: 设置窗口标题
title tensoflow
pause

执行效果

CMD窗口显示tensoflow标题

color 控制台颜色

color 命令用于设置当前 CMD 控制台窗口的背景色前景色(文字颜色),默认情况下控制台是黑底白字。它的核心价值是:

  • 区分脚本的不同执行阶段(比如错误提示用红底黄字,正常输出用黑底绿字);
  • 提升脚本界面的可读性,避免单调的黑白配色。

(1)基础使用

@echo off
title 颜色设置示例

:: 1. 黑底绿字(背景0,前景2)- 正常输出
color 02
echo ======================
echo 正常执行:黑底绿字
echo ======================
pause

:: 2. 黑底亮红色(背景0,前景C)- 错误提示
color 0C
echo ======================
echo 错误提示:黑底亮红色
echo ======================
pause

:: 3. 蓝底黄色(背景1,前景6)- 警告提示
color 16
echo ======================
echo 警告提示:蓝底黄色
echo ======================
pause

:: 恢复默认配色(黑底白字)
color
echo 已恢复默认配色(黑底白字)
pause

taskkill 结束进程

强制结束正在运行的进程。

(1)按照进程名结束单个进程

@echo off

echo 正在结束Reminder.exe进程...

:: 强制结束Reminder.exe进程
:: /f 强制结束 /im 指定进程名
taskkill /f /im Reminder.exe

pause

小贴士

此处进程名就是任务管理器里存在的进程名或映像名称对应的.exe文件名

timeout 休眠

用于让脚本暂停执行指定时长。

基础语法

# /t 必选参数 指定等待的秒数
# /nobreak 可选参数 禁用按键跳过功能
# > nul 可选参数 屏蔽timeout自带的倒计时提示
timeout /t [等待秒数] /nobreak > nul

(1)基础使用

@echo off

echo ======================
echo 脚本将等待5秒后继续执行(按任意键可跳过)
echo ======================

:: 等待5秒,允许按键跳过
timeout /t 5

echo 等待结束,脚本继续执行!

pause

执行效果

======================
脚本将等待5秒后继续执行(按任意键可跳过)
======================

等待 3 秒,按一个键继续 ...
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8