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一个一个弹出栈,直到栈里弹空了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/143780.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深信服云桌面用户忘记密码后的处理

深信服云桌面用户忘记了密码&#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;效率机制…

IntelliJ IDEA 左侧Commit栏不见了

1.点击File->Settings->Version Control->Commit 2.勾选Use non-modal commit interface

喜讯 | 怿星科技获评SAE“优秀核心零部件企业”,测试软件平台工具广受赞誉

2023年9月22日-23日&#xff0c;SAE 2023汽车智能与网联技术国际学术会议成功举行。此次学术会议由SAE International与南昌智能新能源汽车研究院联合主办&#xff0c;大会汇聚了来自国内外智能网联领域的顶尖专家和学者。大会同期颁布的奖项旨在向行业推选出更多新时代涌现的杰…

conan入门(二十七):因profile [env]字段废弃导致的boost/1.81.0 在aarch64-linux-gnu下交叉编译失败

今天在尝试用conan 1.60.0使用aarch64-linux-gnu编译器交叉编译boost/1.81.0时报错了&#xff1a; conan install boost/1.81.0 -pr:h aarch64-linux-gnu.jinja -pr:b default --build boost输出如下&#xff1a; Configuration (profile_host): [settings] archarmv8 arch_b…

26606-2011 工业用氰乙酸甲酯 阅读笔记

声明 本文是学习GB-T 26606-2011 工业用氰乙酸甲酯. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了工业用氰乙酸甲酯的要求、试验方法、检验规则、标志、包装、运输、贮存和安全。 本标准适用于以氯乙酸、氰化钠、甲醇等为原料…

fiddler抓包番外————了解工具栏

前言 作为一款功能强大的工具&#xff0c;Fiddler 提供了许多实用的功能和工具栏&#xff0c;可以帮助用户更加高效地使用它。 如果您想了解 Fiddler 的工具栏及其功能&#xff0c;那么本篇文章就是为您准备的。 在这里&#xff0c;我将为大家详细介绍 Fiddler 的工具栏及其各…

蓝牙核心规范(V5.4)11.1-LE Audio 笔记之诞生的前世今生

专栏汇总网址:蓝牙篇之蓝牙核心规范学习笔记(V5.4)汇总_蓝牙核心规范中文版_心跳包的博客-CSDN博客 爬虫网站无德,任何非CSDN看到的这篇文章都是盗版网站,你也看不全。认准原始网址。!!! 1.LE Audio应用的场景 这里面有四个场景是LE Audio最初需要应用的场景。比如助…

工业交换机一般的价格是多少呢?

工业交换机是一种应用于工业领域的网络设备。它的性能和所有安全指标都比一般商业交换机更加稳定。所以&#xff0c;工业级交换机的价格相对于普通的交换机要稍稍昂贵一些。工业交换机一般的价格是多少呢&#xff1f;每个厂家的交换机价格是不是都一样呢&#xff1f; 首先&…

视频监控平台客户端开发记录

效果图 所用到的核心技术 QT信号槽机制;布局器;QStylesheet;QStackedWidget;QTreeView;QTableView;QNetworkAccessManager;Tr();QT信号槽机制 信号槽机制是QT的精华,主要解决UI界面中事件与事件响应的关联关系。QT将界面的操作(如点击按钮、拖动窗口等)定义为信号,…

15. RocketMQ 消息队列

Spring Cloud 微服务系列文章&#xff0c;点击上方合集↑ 1. 简介 RocketMQ是一款开源的分布式消息中间件&#xff0c;它具有高可靠性、高性能和可伸缩性&#xff0c;被广泛用于构建分布式系统中的可靠消息传递服务。 官网地址&#xff1a; https://rocketmq.apache.org/ 2…

【内网穿透】在Ubuntu搭建Web小游戏网站,并将其发布到公网访问

目录 前言 1. 本地环境服务搭建 2. 局域网测试访问 3. 内网穿透 3.1 ubuntu本地安装cpolar 3.2 创建隧道 3.3 测试公网访问 4. 配置固定二级子域名 4.1 保留一个二级子域名 4.2 配置二级子域名 4.3 测试访问公网固定二级子域名 前言 网&#xff1a;我们通常说的是互…

独立站FP广告总被限流?一文教你使用斗篷黑科技

FP产品作为高利润高回报的产品&#xff0c;它热度在出海商品中是一直居高不下的。但这类产品在独立站的运营中往往会遇到很多问题&#xff0c;例如最让商家头疼的投流问题&#xff0c;FP产品的推广营销很容易遭到平台的管控封禁&#xff0c;这时候往往会用到市面上现在很火的黑…

安卓手机使用油猴脚本教程

下载支持油猴脚本的浏览器 请现在应用商店下载 x浏览器 &#xff0c;如果自己手机应用商店没有的话&#xff0c;可以在官网下载安装包&#xff0c;然后手动安装。 x浏览器官网 应用图标&#xff1a; 导入油猴脚本 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1…

二、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;有什么特点…

华为云云耀云服务器L实例评测 | 实例使用教学之简单使用:通过命令行管理华为云云耀云服务器

华为云云耀云服务器L实例评测 &#xff5c; 实例使用教学之简单使用&#xff1a;通过命令行管理华为云云耀云服务器 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀云服务…

Vue 学习笔记 错误ResizeObserver loop completed with undelivered notifications

环境Vue3 Ts 使用了el-table 后&#xff0c;容易出现如下错误 ERROR ResizeObserver loop completed with undelivered notifications. at handleError (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:299:58) at eval (webpack-internal:///./nod…

传统安防音视频平台架构

内部级联,为上下级均为自己平台海康子进程调用海康的设备SDKPTPCS通过封装代理不同的私有协议的差异,封装为大华统一的三代协议PC客户端通过调用平台SDKCMS一般采用双机热备技术PTPCS系统一般采用Windows嵌入式,由于部分设备厂家提供的SDK只有Windows的服务和服务之间的调用通过…

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

不同走向地下管线的地质雷达响应特征分析 前言 以PVC管线为例&#xff0c;建立不同走向&#xff08;水平倾斜、垂直倾斜、水平相邻&#xff09;的三维管线地质模型&#xff0c;进行三维地质雷达数据模拟&#xff0c;分析不同走向地下管线的地质雷达响应特征。 文章目录 不同…

Spring Boot 常用注解详解:全面指南

Spring Boot 中有许多常用的注解&#xff0c;这些注解用于配置、管理和定义 Spring Boot 应用程序的各个方面。以下是这些注解按大类和小类的方式分类&#xff0c;并附有解释和示例。 一、Spring Boot 核心注解 SpringBootApplication 解释&#xff1a;这是一个组合注解&a…