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、…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
SQL进阶之旅 Day 22:批处理与游标优化
【SQL进阶之旅 Day 22】批处理与游标优化 文章简述(300字左右) 在数据库开发中,面对大量数据的处理任务时,单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”,深入探讨如何通过批量操作和游标技术提…...
Copilot for Xcode (iOS的 AI辅助编程)
Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot,它能根据上下文补全代码,快速生成常用…...
