批处理详解

批处理

1. 定义

批处理(batch),亦称为批处理脚本,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件的扩展名为bat 。

2. 常用命令简介

2.1 echo 命令

作用:显示消息,打开或者关闭回显功能。

# 关闭请求回显功能,一般写在批处理开头第一行
@ECHO OFF
# 在窗口显示消息
echo message
2.2 title 命令

作用:为命令窗口命名,使得程序更直观

# 命令窗口名称为"演示程序"
title 演示程序
2.3 rem 命令

作用:注释

# 命令窗口名称为"演示程序"
rem 演示程序
2.4 pause 命令

作用:暂停命令

# 执行该命令时,将会受到如下消息
请按任意键继续...
2.5 cd 命令

作用:显示当前路径,或者跳转路径

# 显示当前路径
cd
# 进入桌面路径
cd C:\Users\161220a\Desktop
2.6 set 命令

作用:声明变量,并赋值。使用%变量名%的方式来获取变量的值。

# 声明变量 a
set a=100
# 获取变量的值
echo %a%
# 还可以将命令的返回值赋给变量,将当前路径赋值给b
set b=%cd%
# 输出当前路径
echo %b%
2.7 cls 命令

作用:清除屏幕。

2.8 setlocal/endlocal 命令

作用:使得中间的程序对于系统变量的改变只是在程序内部起作用,不会影响整个系统级别。

@echo off
setlocal
path=d:\tmp
echo 局部环境变量path值
set path
endlocal
echo 系统环境变量path的值
set PATH
pause
2.9 goto 命令

作用:流程跳转,去执行下一个方法或流程。
每个流程需要定义个流程名称,并且以冒号开头。

...
goto runProgram

:runProgram
...
goto end

:end
pause

3. 文件夹管理命令

3.1 cd 命令

显示当前目录或改变目录

3.2 md 命令

创建目录

3.3 rd 命令

删除目录

3.4 dir 命令

显示目录中的文件和子目录列表

3.5 xcopy 命令

XCOPY是COPY的扩展,可以把指定的目录连文件和目录结构一并拷贝,但不能拷贝系统文件。
但是执行xcopy命令需要在path路径上添加C:\windows\system32
否则xcopy命令不识别

# 设置环境变量,并添加到PATH变量中
set "tmpEnv=C:\windows\system32"
set PATH=%PATH%;%tmpEnv%
# 执行拷贝命令,参数在后面也可以
xcopy /s/y nlpir\* %nlpirDir%

常用参数设置
/s 复制目录和子目录,除了空的。
/e 复制目录和子目录,包括空的。
/t 只复制子目录结构(即目录树),不复制文件。
/y 即直接覆盖已存在的文件。
/-y 提示您确认要覆盖已存在的目标文件。
/h 复制具有隐藏和系统文件属性的文件。默认情况下,“xcopy”不复制隐藏或系统文件。

4. 文件管理命令

4.1 type 命令

显示文本文件的内容

4.2 copy 命令

复制文件到另一个位置

4.3 del 命令

删除一个或多个文件

4.4 move 命令

移动文件并重命名文件

# 移动文件到上一级目录,并改名为new.txt
move title.txt ../new.txt
4.5 ren 命令

重命名文件

# 将文件重命名为新new.txt
ren title.bat new.txt

5. 符号简介

5.1 @ 回显屏蔽符

表示不显示@后面的命令,不想别人看到你使用的命令时可以使用。

5.2 > ; >> 重定向

将输出信息重定向到指定的设备或文件中。系统默认输出到显示器上。
> 是覆盖,>> 是追加文件

echo 123abc > a.txt
echo 1234abcd >> a.txt
5.3 < 重定向

将输入信息来源重定向到指定设备或文件中。系统默认从显示器读取信息。
/p 表示从外部获取信息赋值

@echo off
echo abcdefg——这是文件a.txt中的信息>a.txt
echo 请任意输入字符,以回车结束:
set /p ifo=
cls
echo 【 从屏幕获得的输入信息 】
echo %ifo%
set /p ifo=<a.txt
echo 【 从文件a.txt获得的输入信息 】
echo %ifo%
pause>nul
5.4 | 管道符号

将管道符号前面命令的输出结果重定向输出到管道符号后面的命令中去,作为后面命令的输入。
使用格式为:command_1|command_2。

5.5 ^ 转义字符

将特殊符号转化为一般符号,即剥离特殊符号的特殊地位。特殊符号指:| & > <

5.6 逻辑命令符

逻辑命令符包括:&;、&&;、||
& -它的作用是用来连接n个DOS命令,并把这些命令按顺序执行,而不管是否有命令执行失败;
&& -当&&;前面的命令成功执行时,执行&&;后面的命令,否则不执行;
|| -当||前面的命令失败时,执行||后面的命令,否则不执行。

6. 流程控制

6.1 if 语句

if语句格式为:
if 判断条件 命令 else 命令

@echo off 
set "str=this is a test" 
REM 检测变量%str%是否等于test,如果相等,显示OK,否则显示NO 
if "%str%"=="test" (echo OK) else echo NO 
pause>nul 

批处理中大于符号不能用:“>”,而用"gtr",其它的也类似
比较运算符一览:
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于

@echo off 
set /a num1=20 
set /a num2=15 
if %num1% gtr %num2% echo %num1%大于%num2% 
if %num1% EQU %num2% echo %num1%等于%num2% 
if %num1% LSS %num2% echo %num1%小于%num2% 
pause>nul 
6.2 for循环

for命令是一种对一系列对象依次循环执行同一个或多个命令的在命令行或批处理中运行的命令,结合一些Windows管理中的程序后,其处理功能强大、应用灵活方便程度令人刮目相看

for循环的基本格式如下:
for /参数 %变量 in (集) do 命令
上面除中文的以外,其余的是按它的格式要求书写的,大小写都行

参数详解:

/d /d 参数是指定仅对目录而不是文件执行的for命令

# 列出C盘下所有文件夹,非批处理文件命令
for /d %a in (c:\*.*) do @echo %a

/R /R参数之后还可带盘符及路径

@echo off
rem 显示d:盘中所有文件名为file1和file2的列表
for /r d:\ %%h in (file1,file2) do if exist %%h echo %%h
pause

/L 设置循环次数以及递增值,格式如下:
for /L %%变量 in (起始值,每次增值,结束时的比较值) do 命令

@echo off
::在D盘建立aa1~ aa5五个文件夹
for /L %%i in (1,1,5) do md d:\aa%%i
pause

双冒号标识注释,也可以用rem来注释

/f 这个参数/f将会打开(集)里的文件,处理文件内容,命令格式为:
for /f “选项” %变量 in ( “字符串”-集 ) do 命令
for /f “选项” %变量 in ( 文件名-集 ) do 命令
for /f “选项” %变量 in ( 命令-集 ) do 命令

d盘下新建一个abc.txt文件,内容为:

姓名 性别 年龄 等-级
张三 男 36   A-1
李四 男 29   B-2
赵六 女 31   A-2
# 显示文件中的内容
for /f %c in (d:\abc.txt) do @echo %c

执行以上命令会发现一个问题,窗口仅显示了文件每行以空格分隔的第一部分内容。所以有下面详细的命令

for /f “skip=1 tokens=4,1 delims=- “ %c in (d:\abc.txt) do @echo %c %d

skip 跳过前几行
tokens 需要切分后的哪几部分
delims 根据什么字符切分,可以是多个值

7. 完整示例

以下内容为一个剪辑视频的CMD程序,通过输入剪辑视频的信息并执行剪辑过程,将一个长视频剪辑,截取出原视频的某个时间段。

cls
@ECHO OFF

title 视频剪辑程序


:MAIN
echo 请输入文件夹路径:
set/p "fullPath=>"
cd %fullPath%
goto INPUT


:INPUT
echo 请输入要剪辑的视频名称:
set/p "file=>"
echo 请输入剪辑视频开始时间(例如:00:01:20):
set/p "start=>"
echo 请输入剪辑视频结束时间(例如:01:00:40):
set/p "end=>"
echo 剪辑文件为:%fullPath%\%file%
echo 剪辑时间为:%start% - %end%
echo 请确认是否剪辑视频(y/n):
set/p "choose=>"
if %choose%==Y goto CONFIRM
if %choose%==y goto CONFIRM
if %choose%==N goto CANCEL
if %choose%==n goto CANCEL
echo Invalid choice
goto CANCEL


:CONFIRM
echo 剪辑视频开始
echo 剪辑文件为:%fullPath%\%file%
echo 剪辑时间为:%start% - %end%
rem 配置环境变量
set "datetime=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"
set "ffmpeg=D:\software\ffmpeg-6.0-full_build-shared\bin"
set PATH=%PATH%;%ffmpeg%
rem ffmpeg.exe -ss %start% -i %fullPath%\%file% -t %end% -c copy %fullPath%\%file%-%datetime%.mp4 -y
ffmpeg.exe -i %fullPath%\%file% -ss %start% -to %end% -c:v copy %fullPath%\%file%-%datetime%.mp4
echo 剪辑视频结束
goto CONTINUE


:CONTINUE
echo 请确认是否继续剪辑视频(y/n):
set/p "choose=>"
if %choose%==Y goto INPUT
if %choose%==y goto INPUT
if %choose%==N goto CANCEL
if %choose%==n goto CANCEL
echo Invalid choice
goto CANCEL


:CANCEL
echo 剪辑视频取消
goto End


:End
pause


参考文献:

  1. DOS 批处理命令For循环命令详解
  2. bat批处理 if 命令示例详解
  • 0
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值