windows:批处理bat实例
文章目录
- 文件/文件夹管理实例
- 批量更改文件名
- 创建编号从0到9的10个文件
- 自动循环运行某个程序
- 显示批处理的完整路径信息
- 将文件名更名为当前系统日期
- 使用批处理命令自动接收用户输入的信息
- 计算当前目录及子目录(中文件)所占硬盘空间
- 自动删除当前目录及子目录下所有空文件夹
- 批处理中不同盘符路径的切换
文件/文件夹管理实例
批量更改文件名
命名a.bat,写上以下代码:
@echo off
echo 开始更改文件名
set extensions=.rar
set /a sum=0
for %%m in (*) do (if not "%%m" == "a.bat" (ren %%m %%m%extensions%set /a sum=sum+1)
)
echo 111
echo 修改完成,共修改%sum%个文件的后缀!
set extensions=
set sum=
ren命令,修改文件名,其实就是rename
运行之前,当前文件夹内容:

运行之后,当前文件夹内容:

比较有意思的是,当整个bat的最后一行我放的是带变量的echo时,它竟然没有输出。。。直到我在后面又添了几行。。。
创建编号从0到9的10个文件
@echo off
for /l %%n in (0, 1, 9) do (echo 内容为:%%n > %%n.txt
)
echo 创建完成

自动循环运行某个程序
@echo off
:start
ping www.baidu.com > nul
if not %errorlevel% EQU 0 (goto start)
start "新窗口" echo ping通!
> nul:表示将指令的输出重定向至空设备,不在前台做显示,类似linux里的/dev/null;
%errorlevel%是一个系统变量,用来获取上一条指令的运行状态,如果是0,则表示上一条指令正常运行完成,如果是非0外的其他数字,则表示指令运行失败。
start之前讲过了,开一个新窗口来执行后面的命令。
显示批处理的完整路径信息
其实就是打印当前的绝对路径:
@echo off
echo %~dp0
%~表示变量扩展
将文件名更名为当前系统日期
@echo off
if not exist %1 (echo 命令用法如下:echo %0 filenameecho filename表示需要修改的原文件名echo.goto end
)set extension=%~x1
for /F "tokens=1-4 delims=/- " %%a in ('date /t') do (rem set date=%%a%%b%%cset date=%%b%%c%%d
)
ren "%1" "%date%%extension%"
echo 文件%1已经被改名为%date%%extension%
set extension=
set date=
:end
输出:
D:\TEMP\bat>a.bat 1.txt
文件1.txt已经被改名为20230719.txt
原理其实比较简单
首先我们需要知道date /t的输出,是这个样子的:周三 2023/07/19,而我们的这次需求里,目的其实是想把20230719提取出来,怎么提取呢,自然就是分割了,就是里面的"tokens=1-4 delims=/- "这部分代码,这是啥意思呢?
token=1-4表示切割出1-4个字符串,分别对应了%%a、%%b、%%c、%%d;
"delims=/- "定义了分隔符,这里定义了3种,分别是斜杠、横杠和空格;
这些分隔符把date /t的输出分割成了4部分,分别是:周三、2023、07、19,只要把后面3个组起来就是我们需要的内容了。
使用批处理命令自动接收用户输入的信息
首先,bat中没有while关键字,所以如果要实现这种循环结果的话,只能用for,或者结合goto语句。
直接上代码:
@echo off
echo.
:repeat
echo.
echo.
echo ##################################
echo -----1、输入数字1并回车,显示当前日期
echo -----2、输入数字2并回车,显示当前时间
echo -----3、输入数字3并回车,显示当前文件列表
echo -----4、输入数字4并回车,则终止批处理
echo.
echo.
echo 请输入需要执行的操作
set /p num=
if "%num%" == "1" (clsecho.echo.echo 当前日期为:date /tpausegoto repeat
)
if "%num%" == "2" (clsecho.echo.echo 当前时间为:time /tpausegoto repeat
)
if "%num%" == "3" (clsecho.echo.echo 当前文件列表为:dir /wpausegoto repeat
)
echo.
echo.
echo 输入了字符%num%,批处理自动退出。
pause
具体结果不太好演示,就不截图了,有兴趣的话跑一下就可以。
这里比较有意思的有两点:
- goto语句带来的类似while循环的功能;
- 获取用户输入:
set /p num=,表示将用户在回车前的键入,都存进变量num里。
计算当前目录及子目录(中文件)所占硬盘空间
核心在于一个dir指令。
首先我们需要明确dir的输出,在cmd里执行dir,我的输出是这样的:
D:\Code\BAT>dirVolume in drive D is DataVolume Serial Number is A237-8B58Directory of D:\Code\BAT2023/08/01 21:05 <DIR> .
2023/07/14 19:33 <DIR> ..
2023/08/07 19:06 195 a.bat
2023/07/31 16:57 69 a.txt
2023/08/01 21:13 442 b.bat
2023/07/14 20:57 11 b.txt
2023/07/14 20:57 11 c.txt
2023/07/31 10:54 <DIR> d1
2023/07/31 10:53 <DIR> d2
2023/07/31 10:53 <DIR> d35 File(s) 728 bytes5 Dir(s) 330,836,910,080 bytes free
注意最下面两行,已经显示出了当前目录下,有几个文件,几个目录,且文件占的硬盘空间和当前剩余空间,我们要拿的就是倒数第二行!也就是说,问题转化为怎么拿出那个728bytes。
代码如下:
@echo off
for /f "tokens=*" %%a in ('dir') do (echo "%%a" | find "File(s)" > nul && for /f "tokens=3*" %%b in ("%%a") do (echo 当前目录大小:%%b%%c)
)
最终输出:
D:\Code\BAT>a.bat
当前目录大小:728bytes
这里需要注意:
- 跟find结合使用时,前面的
echo "%%a"必须是带双引号的状态,如果写成echo %%a的话,对于find匹配不出的行,会逐行报错The system cannot find the file specified.,具体原因待探查; echo "%%a" | find "File(s)" > nul && echo "%%a"会只输出含File(s)的行,所以这里的find是起到了类似过滤的效果;
不过上述代码只统计了当前目录下文件的总大小,如果我是想统计每个子目录里的文件大小呢?
其实代码差不多:
@echo off
for /f %%a in ('dir /ad/s/b') do (for /f "tokens=*" %%b in ('dir %%a') do (echo "%%b" | find "File(s)" > nul && for /f "tokens=3*" %%c in ("%%b") do (echo %%a: %%c%%d)))echo.
输出:
D:\Code\BAT>a.bat
D:\Code\BAT\d1: 0bytes
D:\Code\BAT\d2: 0bytes
D:\Code\BAT\d3: 0bytes
D:\Code\BAT\d1\dd1: 122bytes
这里唯一需要注意的就是dir的用法:
dir /a表示以特定模式做展示,其中/ad表示只展示文件夹,/aa应该是表示只展示文件;
dir /b表示以简单模式输出,即只输出文件名和文件夹名,其他一概不输出,如:
D:\Code\BAT>dir /b
a.bat
a.txt
d1
dir /s则表示展示指定目录及其子目录下所有的文件和文件夹。
自动删除当前目录及子目录下所有空文件夹
这个思路很简单,分两步:
- 首先遍历查找当前目录下及子目录下的所有空文件夹,将全路径输出至listnull.txt;
- 遍历上一步生成的文件,逐一删除。
代码如下:
@echo off
cd. > listnull.txt
for /f %%a in ('dir /ad/s/b') do (dir /b "%%a" | findstr . > nul || echo %%a >> listnull.txt
)set /a sum=0
for /f %%a in (listnull.txt) do (rd /q %%aset /a sum=sum+1
)
echo.
echo 共删除%sum%个空文件夹
echo.
set sum=
del /q listnull.txt
这里需要特别注意的主要是findstr + ||的联合使用。
findstr .其实是指通配任意字符,只要前面指令有返回字符串,findstr就算成功,但是||后面的指令是只有在前面执行失败的时候才会执行,这意味着只有当%%a所代表的目录下,啥都没有,即没有文件也没有文件夹的时候,才会执行||后面的命令,因此联合使用后反而是相当于是筛出了所有空的%%a。
形如:
D:\Code\BAT>type listnull.txt
D:\Code\BAT\d2
D:\Code\BAT\d3
还有就是几个指令的用法,如rd表示删除文件夹,del表示删除文件。
批处理中不同盘符路径的切换
这个其实没啥好讲的,就是两个切换盘符用的常用指令:
pushd 指定路径:将当前目录存储到一个虚拟栈里,然后将当前工作目录切换成指定的路径,如pushd c:\或者是pushd c:\users\
popd:将当前工作目录切换成栈里保存的上一个目录。
这里需要注意,pushd存储路径的时候是相当于用一个栈去存储的,然后popd一个一个弹出栈,直到栈里弹空了。
相关文章:
windows:批处理bat实例
文章目录 文件/文件夹管理实例批量更改文件名创建编号从0到9的10个文件自动循环运行某个程序显示批处理的完整路径信息将文件名更名为当前系统日期使用批处理命令自动接收用户输入的信息计算当前目录及子目录(中文件)所占硬盘空间自动删除当前目录及子目…...
websocket php教程
WebSocket 是 HTML5 提供的一种网络通讯协议,用于服务端与客户端实时数据传输。广泛用于浏览器与服务器的实时通讯,APP与服务器的实时通讯等场景。 相比传统HTTP协议请求响应式通讯,WebSocket协议可以做到实时的双向通讯,服务端可…...
【操作系统】调度算法的评价指标和三种调度算法
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 操作系统 一、调度算法的评价指标1.1 CPU利…...
CSS详细基础(三)复合选择器
前两章介绍了CSS中的基础属性,以及一些基础的选择器,本贴开始介绍复合选择器的内容~ 在 CSS 中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合形…...
LeetCode【2251. 花期内花的数目】
给你一个下标从 0 开始的二维整数数组 flowers ,其中 flowers[i] [starti, endi] 表示第 i 朵花的 花期 从 starti 到 endi (都 包含)。同时给你一个下标从 0 开始大小为 n 的整数数组 people ,people[i] 是第 i 个人来看花的时间…...
大数据(九):数据可视化(一)
专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对…...
讲讲项目里的仪表盘编辑器(二)
应用场景 正常来说,编辑器应用场景应该包括: 编辑器-预览 编辑器 最终运行时 怎么去设计 上一篇推文,我们已经大概了解了编辑器场景。接下来,我们来看预览时的设计 编辑器-预览 点击预览按钮,执行以…...
文心一言 VS 讯飞星火 VS chatgpt (102)-- 算法导论9.3 8题
八、用go语言,设 X[1…n]和 Y[1…n]为两个数组,每个都包含n个有序的元素。请设计一个 O(lgn)时间的算法来找出数组 X和Y中所有 2n 个元素的中位数。 文心一言: 要在 O(lgn) 时间内找出两个有序数组 X 和 Y 中所有元素的中位数,可…...
axios添加缓存请求,防止多次请求,单页面多个同一组件造成多次请求解决方案
在axios中,添加 const cacheMap {};响应拦截添加 try {// 删除缓存const api res.config.url.replace(process.env.VUE_APP_BASE_API, "");if (cacheMap.hasOwnProperty(api)) {delete cacheMap[api];}} catch (err) {}创建两个请求方法 /*** Get缓存…...
Java包装类与自动拆箱装箱
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址[1] 面试题手册[2] 系列文章地址[3] 1. 什么是 Java 包装类和自动拆箱装箱? Java 中的基本数据类型(如 int、cha…...
基于SpringBoot网上超市的设计与实现【附万字文档(LW)和搭建文档】
主要功能 前台登录: 注册用户:用户名、密码、姓名、联系电话 用户: ①首页、商品信息推荐、商品资讯、查看更多 ②商品信息、商品详情、评论、点我收藏、添加购物车、立即购买 ③个人中心、余额、点我充值、更新信息、我的订单、我的地址、我…...
二、C++项目:仿muduo库实现并发服务器之时间轮的设计
文章目录 一、为什么要设计时间轮?(一)简单的秒级定时任务实现:(二)Linux提供给我们的定时器:1.原型2.例子 二、时间轮(一)思想(一)代码 一、为什…...
计算机竞赛 深度学习OCR中文识别 - opencv python
文章目录 0 前言1 课题背景2 实现效果3 文本区域检测网络-CTPN4 文本识别网络-CRNN5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习OCR中文识别系统 ** 该项目较为新颖,适合作为竞赛课题方向,…...
蓝桥等考Python组别五级003
第一部分:选择题 1、Python L5 (15分) 表达式“a >= b”等价于下面哪个表达式?( ) a > b and a == ba > b or a == ba < b and a == ba < b or a > b正确答案:B 2、Python L5 (15分) 当x是偶数时,下面哪个表达式的值一定是True?( …...
学之思项目第一天-完成项目搭建
一、前端 拉下前端代码执行 npm i 然后执行npm run serve就行了 二、后端 搭建父子模块 因为这个涉及到前台以及后台管理所以使用父子模块 并且放置一个公共模块,放置公共的依赖以及公共的代码 2.1 搭建父子工程 这个可以使用直接一个个的maven模块ÿ…...
pandas--->CSV / JSON
csv CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。 CSV 是一种通用的、相对简单的文…...
LeetCode算法二叉树—116. 填充每个节点的下一个右侧节点指针
目录 116. 填充每个节点的下一个右侧节点指针 题解: 代码: 运行结果: 给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: struct Node {int val;Node *left;N…...
二、2023.9.28.C++基础endC++内存end.2
文章目录 17、说说new和malloc的区别,各自底层实现原理。18、 说说const和define的区别。19、 说说C中函数指针和指针函数的区别?20、 说说const int *a, int const *a, const int a, int *const a, const int *const a分别是什么,有什么特点…...
DevSecOps 将会嵌入 DevOps
通常人们在一个项目行将结束时才会考虑到安全,这么做会导致很多问题;将安全融入到DevOps的工作流中已产生了积极结果。 DevSecOps:安全正当时 一直以来,开发人员在构建软件时认为功能需求优先于安全。虽然安全编码实践起着重要作…...
不同管径地下管线的地质雷达响应特征分析
不同管径地下管线的地质雷达响应特征分析 前言 以混凝土管线为例,建立了不同管径的城市地下管线模型,进行二维地质雷达正演模拟,分析不同管径管线的地质雷达响应特征。 文章目录 不同管径地下管线的地质雷达响应特征分析前言1、管径50cm2、…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
