当前位置: 首页 > news >正文

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个文件自动循环运行某个程序显示批处理的完整路径信息将文件名更名为当前系统日期使用批处理命令自动接收用户输入的信息计算当前目录及子目录&#xff08;中文件&#xff09;所占硬盘空间自动删除当前目录及子目…...

websocket php教程

WebSocket 是 HTML5 提供的一种网络通讯协议&#xff0c;用于服务端与客户端实时数据传输。广泛用于浏览器与服务器的实时通讯&#xff0c;APP与服务器的实时通讯等场景。 相比传统HTTP协议请求响应式通讯&#xff0c;WebSocket协议可以做到实时的双向通讯&#xff0c;服务端可…...

【操作系统】调度算法的评价指标和三种调度算法

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 操作系统 一、调度算法的评价指标1.1 CPU利…...

CSS详细基础(三)复合选择器

前两章介绍了CSS中的基础属性&#xff0c;以及一些基础的选择器&#xff0c;本贴开始介绍复合选择器的内容~ ​ 在 CSS 中&#xff0c;可以根据选择器的类型把选择器分为基础选择器和复合选择器&#xff0c;复合选择器是建立在基础选择器之上&#xff0c;对基本选择器进行组合形…...

LeetCode【2251. 花期内花的数目】

给你一个下标从 0 开始的二维整数数组 flowers &#xff0c;其中 flowers[i] [starti, endi] 表示第 i 朵花的 花期 从 starti 到 endi &#xff08;都 包含&#xff09;。同时给你一个下标从 0 开始大小为 n 的整数数组 people &#xff0c;people[i] 是第 i 个人来看花的时间…...

大数据(九):数据可视化(一)

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对…...

讲讲项目里的仪表盘编辑器(二)

应用场景 正常来说&#xff0c;编辑器应用场景应该包括&#xff1a; 编辑器-预览 编辑器 最终运行时 怎么去设计 上一篇推文&#xff0c;我们已经大概了解了编辑器场景。接下来&#xff0c;我们来看预览时的设计 编辑器-预览 点击预览按钮&#xff0c;执行以…...

文心一言 VS 讯飞星火 VS chatgpt (102)-- 算法导论9.3 8题

八、用go语言&#xff0c;设 X[1…n]和 Y[1…n]为两个数组&#xff0c;每个都包含n个有序的元素。请设计一个 O(lgn)时间的算法来找出数组 X和Y中所有 2n 个元素的中位数。 文心一言&#xff1a; 要在 O(lgn) 时间内找出两个有序数组 X 和 Y 中所有元素的中位数&#xff0c;可…...

axios添加缓存请求,防止多次请求,单页面多个同一组件造成多次请求解决方案

在axios中&#xff0c;添加 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包装类与自动拆箱装箱

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址[1] 面试题手册[2] 系列文章地址[3] 1. 什么是 Java 包装类和自动拆箱装箱&#xff1f; Java 中的基本数据类型&#xff08;如 int、cha…...

基于SpringBoot网上超市的设计与实现【附万字文档(LW)和搭建文档】

主要功能 前台登录&#xff1a; 注册用户&#xff1a;用户名、密码、姓名、联系电话 用户&#xff1a; ①首页、商品信息推荐、商品资讯、查看更多 ②商品信息、商品详情、评论、点我收藏、添加购物车、立即购买 ③个人中心、余额、点我充值、更新信息、我的订单、我的地址、我…...

二、C++项目:仿muduo库实现并发服务器之时间轮的设计

文章目录 一、为什么要设计时间轮&#xff1f;&#xff08;一&#xff09;简单的秒级定时任务实现&#xff1a;&#xff08;二&#xff09;Linux提供给我们的定时器&#xff1a;1.原型2.例子 二、时间轮&#xff08;一&#xff09;思想&#xff08;一&#xff09;代码 一、为什…...

计算机竞赛 深度学习OCR中文识别 - opencv python

文章目录 0 前言1 课题背景2 实现效果3 文本区域检测网络-CTPN4 文本识别网络-CRNN5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习OCR中文识别系统 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;…...

蓝桥等考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就行了 二、后端 搭建父子模块 因为这个涉及到前台以及后台管理所以使用父子模块 并且放置一个公共模块&#xff0c;放置公共的依赖以及公共的代码 2.1 搭建父子工程 这个可以使用直接一个个的maven模块&#xff…...

pandas--->CSV / JSON

csv CSV&#xff08;Comma-Separated Values&#xff0c;逗号分隔值&#xff0c;有时也称为字符分隔值&#xff0c;因为分隔字符也可以不是逗号&#xff09;&#xff0c;其文件以纯文本形式存储表格数据&#xff08;数字和文本&#xff09;。 CSV 是一种通用的、相对简单的文…...

LeetCode算法二叉树—116. 填充每个节点的下一个右侧节点指针

目录 116. 填充每个节点的下一个右侧节点指针 题解&#xff1a; 代码&#xff1a; 运行结果&#xff1a; 给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node {int val;Node *left;N…...

二、2023.9.28.C++基础endC++内存end.2

文章目录 17、说说new和malloc的区别&#xff0c;各自底层实现原理。18、 说说const和define的区别。19、 说说C中函数指针和指针函数的区别&#xff1f;20、 说说const int *a, int const *a, const int a, int *const a, const int *const a分别是什么&#xff0c;有什么特点…...

DevSecOps 将会嵌入 DevOps

通常人们在一个项目行将结束时才会考虑到安全&#xff0c;这么做会导致很多问题&#xff1b;将安全融入到DevOps的工作流中已产生了积极结果。 DevSecOps&#xff1a;安全正当时 一直以来&#xff0c;开发人员在构建软件时认为功能需求优先于安全。虽然安全编码实践起着重要作…...

不同管径地下管线的地质雷达响应特征分析

不同管径地下管线的地质雷达响应特征分析 前言 以混凝土管线为例&#xff0c;建立了不同管径的城市地下管线模型&#xff0c;进行二维地质雷达正演模拟&#xff0c;分析不同管径管线的地质雷达响应特征。 文章目录 不同管径地下管线的地质雷达响应特征分析前言1、管径50cm2、…...

【接口测试学习】白盒测试 接口测试 自动化测试

一、什么是白盒测试 白盒测试是一种测试策略&#xff0c;这种策略允许我们检查程序的内部结构&#xff0c;对程序的逻辑结构进行检查&#xff0c;从中获取测试数据。白盒测试的对象基本是源程序&#xff0c;所以它又称为结构测试或逻辑驱动测试&#xff0c;白盒测试方法一般分为…...

7.网络原理之TCP_IP(下)

文章目录 4.传输层重点协议4.1TCP协议4.1.1TCP协议段格式4.1.2TCP原理4.1.2.1确认应答机制 ACK&#xff08;安全机制&#xff09;4.1.2.2超时重传机制&#xff08;安全机制&#xff09;4.1.2.3连接管理机制&#xff08;安全机制&#xff09;4.1.2.4滑动窗口&#xff08;效率机制…...

Docker Dockerfile解析

Dockerfile是什么 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 官网&#xff1a;Dockerfile reference | Docker Docs 构建三步骤&#xff1a; 编写Dockerfile文件docker build命令构建镜像docker run依镜像运行容…...

浏览器从输入URL到页面展示这个过程中都经历了什么

一. URL输入 URL是统一资源定位符&#xff0c;用于定位互联网上的资源&#xff0c;俗称网址。我们在地址栏输入网址后敲下回车&#xff0c;浏览器会对输入的信息进行以下判断&#xff1a; 1. 检查输入的内容是否是一个合法的URL连接 2. 如果合法的话&#xff0c;则会判断URL…...

2023-09-22 monetdb-事务管理-乐观并发控制-记录

摘要: 2023-09-22 monetdb-事务管理-记录 相关文档: Transaction Management | MonetDB Docs https://en.wikipedia.org/wiki/Optimistic_concurrency_control monetdb事务管理: MonetDB/SQL 支持以 START TRANSACTION 标记并以 COMMIT 或 ROLLBACK 关闭的多语句事务方案。如果…...

蓝桥等考Python组别四级008

第一部分:选择题 1、Python L4 (15分) 字符“D”的ASCII码值比字符“F”的ASCII码值小( )。 1234正确答案:B 2、Python L4 (15分) 下面的Python变量名正…...

SpringMVC 学习(二)Hello SpringMVC

3. Hello SpringMVC (1) 新建 maven 模块 springmvc-02-hellomvc (2) 确认依赖的导入 (3) 配置 web.xml <!--web/WEB-INF/web.xml--> <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee…...

交换机之间配置手动|静态链路聚合

两台交换机&#xff0c;配置链路聚合&#xff1a; 1、禁止自动协商速率&#xff0c;配置固定速率 int G0/0/1 undo negotiation auto speed 100int G0/0/2 undo negotiation auto speed 100 2、配置eth-trunk int eth-trunk 1 mode manual | lacp-staticint G0/0/1 eth-trun…...

Shiro高级及SaaS-HRM的认证授权

Shiro在SpringBoot工程的应用 Apache Shiro是一个功能强大、灵活的&#xff0c;开源的安全框架。它可以干净利落地处理身份验证、授权、企业会话管理和加密。越来越多的企业使用Shiro作为项目的安全框架&#xff0c;保证项目的平稳运行。 在之前的讲解中只是单独的使用shiro&…...

eclipse svn插件安装

1.进入eclipse的help->Eclipse Marketplace,如下图所示&#xff1a; 2.输入“svn”,再按回车&#xff0c;如下图&#xff1a; 3.这我选择的是 Subversive,点击后面的“install”按钮&#xff0c;如下图 Eclipse 下连接 SVN 库有两种插件 —— Subclipse 与 Subversive &…...

怎么看网站建设有多久/营销技巧培训ppt

07.JAVA中&#xff0c;什么是构造方法&#xff1f;什么是构造方法重载&#xff1f;什么是复制构造方法&#xff1f; 当新对象被创建的时候&#xff0c;构造方法会被调用。每一个类都有构造方法。在程序员没有给类提供构造方法的情况下&#xff0c;JAVA编译器会为这个类创建一个…...

男周志做网站/建站工具

1 - String类的特性/*String特性1 String类&#xff1a;代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作 为此类的实例实现。2 String是一个final类&#xff0c;代表不可变的字符序列&#xff0c;不可被继承3 字符串是常量&#xff0c;用双引号("&qu…...

钱多网站/推广小程序

matlab中矩阵LDLT分解与Cholesky分解矩阵LDLT分解与Cholesky分解&#xff1a;矩阵的LDLT消去函数的程序代码&#xff1a;%矩阵的LDLT分解function [s,l,d]ldlt(a)s1;l0;d0;%判断矩阵是否对称if a~a %矩阵不对称&#xff0c;输出错误信息 s0;else bdiag(a); %列向量b存放矩阵a的…...

做网站几天能学会/百度推广区域代理

互联网服务上线之后需要密切关注用户的使用情况&#xff0c;这就需要一个能够整合多个系统日志并提供报表分析可视化的工具。ELK是(elastic-search, logstash, kibana)的缩写。它提供了可扩展的&#xff0c;风格酷炫的日志平台服务一. logstash 服务logstash作为节点日志采集的…...

嘉兴营销型网站建设/深圳知名seo公司

Docker? 为什么要使用Docker&#xff1f; 与卿画眉共浮生关注 0.2162018.10.24 09:31:12字数 1,886阅读 3,647 Docker 是一个开源的容器引擎&#xff0c;可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者和系统管理员在笔记本上编译测试通过的容器可…...

代办网站/宁波网站推广优化哪家正规

应用发布简单的流程&#xff1a;1.集群节点应用下线&#xff08;下面会介绍为什么将这个放在第一位.&#xff09;2.获取最新代码3.编译打包4.推送到应用机器5.差异复制6.重启7.测试8.加入集群 我公司都是使用nginx完成负载均衡的...当我们后端应用python,java,nodejs需要升级上…...