大家好,欢迎来到IT知识分享网。
批处理
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\a\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 命令
# 设置环境变量,并添加到PATH变量中 set "tmpEnv=C:\windows\system32" set PATH=%PATH%;%tmpEnv% # 执行拷贝命令,参数在后面也可以 xcopy /s/y nlpir\* %nlpirDir%
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 < 重定向
@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 | 管道符号
5.5 ^ 转义字符
将特殊符号转化为一般符号,即剥离特殊符号的特殊地位。特殊符号指:| & > <
5.6 逻辑命令符
6. 流程控制
6.1 if 语句
@echo off set "str=this is a test" REM 检测变量%str%是否等于test,如果相等,显示OK,否则显示NO if "%str%"=="test" (echo OK) else echo NO pause>nul
@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管理中的程序后,其处理功能强大、应用灵活方便程度令人刮目相看
参数详解:
/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
以下是对字符串按照分隔符进行切分的示例
@echo off REM 分割字符串 set str=test_video.mp4 echo 对“%str%”进行分割,分割符 "." echo 取第1,2列 for /f "tokens=1,2 delims=." %%a in ("%str%") do ( set name=%%a set suffix=%%b ) echo - echo 输出:%name%, %suffix% >> log.log echo cd D://data >> log.log echo - pause
参考文献:
- DOS 批处理命令For循环命令详解
- bat批处理 if 命令示例详解
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/124503.html