bat 批示处理详解-2

一: 基本运算

1> bat中表示大于、小于等

参数功能
EQU等于
NEQ不等于
LSS小于
LEQ小于或等于
GTR大于
GEQ大于或等于
demo
@echo off
set a=%1%
set b=%2%
if %a% equ %b% (echo yes) else (echo no)

pause
#对传参的比较

2> bat中加减乘除取余

set /a z=10*5 乘法
echo %z%
 
set /a z=10/5 除法
echo %z%
 
set /a z=10+5 加法
echo %z%
 
set /a z=10-5 减法
echo %z%
 
set /a z=10/3 除法(余数不为0)
echo %z%
 
set /a z=10%%3 取余

二: 其他常用命令简介

1> title- 标题

设置命令提示窗口的窗口标题。

TITLE [string]

  string       指定命令提示窗口的标题。

2> mode-配置系统设备

配置系统设备。

串行端口:          MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s]
                                [to=on|off] [xon=on|off] [odsr=on|off]
                                [octs=on|off] [dtr=on|off|hs]
                                [rts=on|off|hs|tg] [idsr=on|off]

设备状态:          MODE [device] [/STATUS]

打印重定向:        MODE LPTn[:]=COMm[:]

选择代码页:        MODE CON[:] CP SELECT=yyy

代码页状态:        MODE CON[:] CP [/STATUS]

显示模式:          MODE CON[:] [COLS=c] [LINES=n]

击键率:            MODE CON[:] [RATE=r DELAY=d]

3> find-在文件中搜索字符串

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]

  /V         显示所有未包含指定字符串的行。
  /C         仅显示包含字符串的行数。
  /N         显示行号。
  /I         搜索字符串时忽略大小写。
  /OFF[LINE] 不要跳过具有脱机属性集的文件。
  "string" 指定要搜索的文本字符串。
  [drive:][path]filename
             指定要搜索的文件。

如果没有指定路径,FIND 将搜索在提示符处键入
的文本或者由另一命令产生的文本

demo


find  /N "D:\360Downloads" .\new.txt
pause

4> findstr-在文件中搜索字符串

在文件中寻找字符串。

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]

  /B         在一行的开始配对模式。
  /E         在一行的结尾配对模式。
  /L         按字使用搜索字符串。
  /R         将搜索字符串作为一般表达式使用。
  /S         在当前目录和所有子目录中搜索匹配文件。
  /I         指定搜索不分大小写。
  /X         打印完全匹配的行。
  /V         只打印不包含匹配的行。
  /N         在匹配的每行前打印行数。
  /M         如果文件含有匹配项,只打印其文件名。
  /O         在每个匹配行前打印字符偏移量。
  /P         忽略有不可打印字符的文件。
  /OFF[LINE] 不跳过带有脱机属性集的文件。
  /A:attr    指定有十六进位数字的颜色属性。请见 "color /?"
  /F:file    从指定文件读文件列表 (/ 代表控制台)。
  /C:string  使用指定字符串作为文字搜索字符串。
  /G:file    从指定的文件获得搜索字符串。 (/ 代表控制台)。
  /D:dir     查找以分号为分隔符的目录列表
  strings    要查找的文字。
  [drive:][path]filename
             指定要查找的文件。

除非参数有 /C 前缀,请使用空格隔开搜索字符串。
例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或
"there"。'FINDSTR /C:"hello there" x.y' 文件 x.y  寻找
"hello there"。

一般表达式的快速参考:
  .        通配符: 任何字符
  *        重复: 以前字符或类出现零或零以上次数
  ^        行位置: 行的开始
  $        行位置: 行的终点
  [class]  字符类: 任何在字符集中的字符
  [^class] 补字符类: 任何不在字符集中的字符
  [x-y]    范围: 在指定范围内的任何字符
  \x       Escape: 元字符 x 的文字用法
  \<xyz    字位置: 字的开始
  xyz\>    字位置: 字的结束

有关 FINDSTR 常见表达法的详细情况,请见联机命令参考

demo


find   /V "*" .\new.txt |findstr /V D:\360Downloads 
pause

5> pushd-保存当前目录以供 POPD 命令使用,然后改到指定的目录。

保存当前目录以供 POPD 命令使用,然后改到指定的目录。

PUSHD [path | ..]

  path        指定要成为当前目录的目录。

如果命令扩展被启用,除了一般驱动器号和路径,PUSHD
命令还接受网络路径。如果指定了网络路径,PUSHD 将创建一个
指向指定网络资源的临时驱动器号,然后再用刚定义的驱动器
号更改当前的驱动器和目录。可以从 Z: 往下分配临时驱动器
号,使用找到的第一个没有用过的驱动器号

demo



@echo off

echo  %cd%
PUSHD D:
echo  %cd%
pause
===============
 C:\Users\CHH_PC\Desktop\test
 D:\
请按任意键继续. . .

6> popd- 更改到 PUSHD 命令存储的目录

更改到 PUSHD 命令存储的目录。

POPD


如果命令扩展被启用,从推目录堆栈 POPD 驱动器时,POPD
命令会删除 PUSHD 创建的临时驱动器号
@echo off

echo  %cd%
PUSHD D:
echo  %cd%

POPD
echo  %cd%
pause
========================
 C:\Users\CHH_PC\Desktop\test
 D:\
 C:\Users\CHH_PC\Desktop\test
请按任意键继续. . .

7> 时间延迟

ping命令延时

@echo off
echo befor:%time%
ping /n 3 127.0.0.1 >nul
echo after:%time%
pause

======
befor:22:02:22.12
after:22:02:24.25
请按任意键继续. . . # 从时间上看这里不是完全是3秒,一般都会提前
用到了ping命令的“/n”参数,表示要发送多少次请求到指定的ip。本例中要发送3次请求到本机的ip(127.0.0.1)。127.0.0.1可简写为127.1。“>nul”就是屏蔽掉ping命令所显示的内容。

for命令延时

@echo off
echo befor:%time%
for /l %%i in (1,1,50000) do echo %%i>nul
echo after:%time%
pause
===================
befor:22:07:08.93
after:22:07:13.68
请按任意键继续. . . # 时间不精确
原理很简单,就是利用一个计次循环并屏蔽它所显示的内容来达到延时的目的

vbs延迟函数


@echo off
echo %time%
call :delay 5000
echo %time%
pause
exit
:delay
echo WScript.Sleep %1>delay.vbs
CScript //B delay.vbs
del delay.vbs
goto :eof
=============
22:09:53.35
22:09:58.64
请按任意键继续. . .
多出来的大约500毫秒时建立和删除临时文件所耗费的时间。误差在一秒之内

批处理命令

仅用批处理命令实现任意时间延迟,精确度10毫秒,误差50毫秒内
仅用批处理命令就可以实现延迟操作

@echo off
set /p delay=请输入需延迟的毫秒数:
set TotalTime=0
set NowTime=%time%
::读取起始时间,时间格式为:13:01:05.95
echo 程序开始时间:%NowTime%
:delay_continue
set /a minute1=1%NowTime:~3,2%-100
::读取起始时间的分钟数
set /a second1=1%NowTime:~-5,2%%NowTime:~-2%0-100000
::将起始时间的秒数转为毫秒
set NowTime=%time%
set /a minute2=1%NowTime:~3,2%-100
:: 读取现在时间的分钟数
set /a second2=1%NowTime:~-5,2%%NowTime:~-2%0-100000
::将现在时间的秒数转为毫秒
set /a TotalTime+=(%minute2%-%minute1%+60)%%60*60000+%second2%-%second1%
if %TotalTime% lss %delay% goto delay_continue
echo 程序结束时间:%time%
echo 设定延迟时间:%delay%毫秒
echo 实际延迟时间:%TotalTime%毫秒
pause
=====================
请输入需延迟的毫秒数:5000
程序开始时间:22:14:44.56
程序结束时间:22:14:49.56
设定延迟时间:5000毫秒
实际延迟时间:5000毫秒
请按任意键继续. . 
首先设定要延迟的毫秒数,然后用循环累加时间,直到累加时间大于等于延迟时间。
误差:windows系统时间只能精确到10毫秒,所以理论上有可能存在10毫秒误差。.

子程序调用形式

@echo off
echo 程序开始时间:%Time%
call :delay 10
echo 实际延迟时间:%totaltime%毫秒
echo 程序结束时间:%time%
pause
exit
::-----------以下为延时子程序--------------------
:delay
@echo off
if \"%1\"==\"\" goto :eof
set DelayTime=%1
set TotalTime=0
set NowTime=%time%
::读取起始时间,时间格式为:13:01:05.95
:delay_continue
set /a minute1=1%NowTime:~3,2%-100
set /a second1=1%NowTime:~-5,2%%NowTime:~-2%0-100000
set NowTime=%time%
set /a minute2=1%NowTime:~3,2%-100
set /a second2=1%NowTime:~-5,2%%NowTime:~-2%0-100000
set /a TotalTime+=(%minute2%-%minute1%+60)%%60*60000+%second2%-%second1%
if %TotalTime% lss %DelayTime% goto delay_continue
goto :eof

timeout 延迟

@echo off
echo 程序开始时间:%Time%
timeout /t 4
echo 程序结束时间:%Time%
pause

================

程序开始时间:22:20:07.53

等待 0 秒,按一个键继续 ...
程序结束时间:22:20:11.13
请按任意键继续. . .
timeout /t 5 /nobreak # 输出信息版本
timeout /t 5 /nobreak > nul # 无信息输出版本
TIMEOUT [/T] timeout [/NOBREAK]

描述:
    这个工具接受超时参数,等候一段指定的时间(秒)或等按任意键。它还接受
    一个参数,忽视按键。

参数列表:
    /T        timeout       指定等候的秒数。有效范围从 -1 到 99999 秒。

    /NOBREAK                忽略按键并等待指定的时间。

    /?                      显示此帮助消息。

注意: 超时值 -1 表示无限期地等待按键。

示例:
    TIMEOUT /?
    TIMEOUT /T 10
    TIMEOUT /T 300 /NOBREAK
    TIMEOUT /T -1

延时对比

类型含义
ping用到了ping命令的“/n”参数,表示要发送多少次请求到指定的ip;
for利用一个计次循环并屏蔽它所显示的内容来达到延时的目的
vbs函数大约500毫秒时建立和删除临时文件所耗费的时间。误差在一秒之内
批处理命令首先设定要延迟的毫秒数,然后用循环累加时间,直到累加时间大于等于延迟时间
timeout工具接受超时参数,等候一段指定的时间(秒)或等按任意键。它还接受一个参数,忽视按键

8> FOR命令中的变量

1. ~I- 删除任何引号("),扩展 %I

2. %~fI- 将 %I 扩展到一个完全合格的路径名

3. %~dI- 仅将 %I 扩展到一个驱动器号

4. %~pI- 仅将 %I 扩展到一个路径

5. %~nI- 仅将 %I 扩展到一个文件名

6. %~xI- 仅将 %I 扩展到一个文件扩展名

7. %~sI- 扩展的路径只含有短名

8. %~aI- 将 %I 扩展到文件的文件属性

9. %~tI- 将 %I 扩展到文件的日期/时间

10. %~zI- 将 %I 扩展到文件的大小

11. %~$PATH:I

二: bat 项目demo

1> 模拟进度条

@echo off

color 9f
echo 程序正在初始化. . .
echo.
echo ┌──────────────────────────────────────┐
set /p=■<nul&timeout /t 1 /nobreak > nul
for /L %%i in (1,1,20) do set /p a=■<nul &timeout /t 1 /nobreak > nul
echo 100%%
echo └──────────────────────────────────────┘
color 07
pause
===================
程序正在初始化. . .

┌──────────────────────────────────────┐
■■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ 100%
└──────────────────────────────────────┘
请按任意键继续. . .

2> 交互界面设计demo

请添加图片描述


@echo off
title 功能界面
:menu_main
echo.
echo ==============================
echo 请选择要进行的操作,然后按回车
echo ==============================
echo.
echo 1.查询输入路径下文件信息
echo.
echo 2.清屏
echo.
echo 3.设置界面颜色
echo.
echo Q.退出
echo.
echo.
:cho
set choice=
set /p choice=请选择:
IF NOT \"%choice%\"==\"\" SET choice=%choice:~0,1%
if /i \"%choice%\"==\"1\" goto get_path
if /i \"%choice%\"==\"2\" goto clear_screen
if /i \"%choice%\"==\"3\" goto clear_menu
if /i \"%choice%\"==\"Q\" goto endd
echo 选择无效,请重新输入
echo.
goto cho

:get_path
set Current_path=%cd%
set /p target_path=请输入查询路径:
%target_path%
echo change %Current_path% to %target_path%
echo 
for /r %cd% %%a in (*) do echo %%a 
echo  all info about %cd%
goto menu_main 

:clear_screen
cls
goto menu_main 	

:clear_menu
echo.
echo ==============================
echo 请选择设置颜色序号,然后按回车
echo ==============================
echo.
echo 1.界面黑    ,蓝色字体
echo.
echo 2.界面黑    ,白色字体
echo.
echo 3.界面淡紫色,蓝色字体
echo.
echo 4.重新设置
echo.
echo 5.回到主菜单
echo.
echo Q.不设置,退出
goto change_color

:change_color
set /p set_color=请输入设置颜色:
if %set_color%==1 (color 01) else if %set_color%==2 (color 07)  else if %set_color%==3 (color D1)^
else if %set_color%==4 (goto clear_menu)  else if %set_color%==Q (goto  endd)
if %set_color%==5 (goto  menu_main)
goto menu_main

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

45度看我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值