本文为作者原创文章,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [master@weiyigeek.top] 中我将及时回复。此篇文章为作者在学习Batch批处理编程中,所编写或者收集整理的批处理示例,能极大的便于初学者作为入门学习的参照学习,从而快速入门到应用在工作实践中,这也是作者发布此篇文章的初心,希望针对大家有帮助,整理不易请点赞、在看与投币吧!
温馨提示: Windows Batch 批处理系列教程示例脚本可访问作者Github仓库中DevelopLearnig的项目,✈直达-> https://github.com/WeiyiGeek/DevelopLearnig/tree/main/TerminalScript/bat
0x00 数值运算示例
1.打印九九乘法表描述: 在批处理中使用 SETLOCAL 和 set 与 FOR 命令,来展示使用批处理来打印四种样式的九九乘法表。
批处理示例
方式1代码语言:javascript复制@ECHO OFF
@REM 九九乘法表
@REM 使用变量延迟绑定扩展
SETLOCAL ENABLEDELAYEDEXPANSION
@REM 终端背景颜色设置
color 2F
echo 正向递增:
for /l %%i in (1,1,9) do (
for /l %%j in (1,1,%%i) do (
set /a h=%%i*%%j
@REM 此处值得学习借鉴
set /p=%%i×%%j^=!h! if %%i==%%j echo. ) ) echo. echo 正向递减: for /l %%i in (9,-1,1) do ( for /l %%j in (1,1,%%i) do ( set /a h=%%i*%%j set /p=%%i×%%j^=!h! if %%i==%%j echo. ) ) echo. echo 反向递增: for /l %%w in (1,1,9) do ( for /l %%k in (%%w,-1,1) do ( set /a h=%%w*%%k set /p=%%w×%%k=!h! if /I %%k==1 echo. ) ) echo. echo 反向递减: for /l %%w in (9,-1,1) do ( for /l %%k in (%%w,-1,1) do ( set /a h=%%w*%%k set /p=%%w×%%k=!h! if /I %%k==1 echo. ) ) pause方式2.代码语言:javascript复制@echo off @REM 正向递增九九乘法表 set num=0 for /l %%i in (1,1,9) do ( for /l %%j in (1,1,%%i) do call :multiply %%i %%j ) goto :end @REM 关键部分 :multiply set /a num+=1 set /a var=%1*%2 set var=%2×%1=%var% set var=%var% if %2 equ 1 (set var=%var:~0,5%) else set var=%var:~0,6% set str=%str% %var% if %num% equ %1 echo %str%&set str=&set num=0 goto :eof @REM 退出程序 :end pause方式3.代码语言:javascript复制@echo off @REM 正向递增九九乘法表 setlocal enabledelayedexpansion for /l %%a in (1,1,9) do ( for /l %%b in (1,1,%%a) do ( set /a i+=1 set /a ans=%%a*%%b set ans=%%b×%%a=!ans! set res=!res! !ans:~0,6! if !i! equ %%a echo!res!&set res=& set i=0 ) ) pause温馨提示: 展示延时绑定的效果使用!变量名|h!,若不使用延迟绑定则%变量名|h%每次输出都为1,set /p 后加入 0x01 字符处理示例 1.使用批处理读取修改某文本文件到ini文件临时文件中示例演示: 代码语言:javascript复制@echo off >tmp.ini for /f "tokens=1* delims=:" %%i in ('findstr /n ".*" 文件位置') do ( if "%%j"=="" (echo.>>tmp.ini) else ( echo %%j|find "被替换内容">nul && ( call set tp=%%j & call echo %%tp:被替换内容=替换内容%%>>tmp.ini)||( >>tmp.ini echo %%j ) ) ) copy tmp.ini 文件位置 /y >nul || (attrib -s -a -r -h 文件位置 & copy tmp.ini 文件位置 /y >nul) del tmp.ini pause偷偷的告诉你哟?【极客全栈修炼】微信小程序已开放 可直接在微信里面直接浏览博主文章哟,后续将上线更多有趣的小工具。 2.使用批处理进行替换文本或者变量中的空格 示例演示: 代码语言:javascript复制@echo off @REM 处理文件文件中的空格 @REM 将文件内容赋值于变量text,此处值得学习。 set /p text= (for %%i in (%text%) do echo '%%i')>newfile.txt @REM 处理变量值中的空格 for %%i in (%time:~0,2%) do set hour=%%i;echo %hour%执行结果: 代码语言:javascript复制[weiyigeek@localhost] $ echo %time% # 8:51:49.25 [weiyigeek@localhost] C:\ $ for %i in (%time:~0,2%) do set hour=%i [weiyigeek@localhost] C:\ $ set hour=8 [weiyigeek@localhost] C:\ $ echo %hour% # 83.使用批处理脚本提取文件中的某一列 描述:假设有文件内容如下,其以列表形式显示了不同文件夹中文件数量,要求提取清单列中最后一列的数字。 代码语言:javascript复制CHECK IS THERE ANY INTERFACE FILES IN I/O DIRS ------------------------------------------------------------------------------- 08 JUN 18 16:40:24 FILES IN ..\BNK.DATA\OFSDATA\AIO.IN.DIR: 0 FILES IN OFS.IN: 0 FILES IN SWIFT.FTP\F.DE.I.MS000: 0 FILES IN SWIFT.FTP\F.DE.O.MS000: 93 脚本示例 代码语言:javascript复制@echo off @REM 逐行处理&字段分割 setlocal enabledelayedexpansion rem into current path cd %~dp0 set FILENAME=%~dp0chkio_out.txt for /f "delims=^" %%i in (%FILENAME%) do ( @echo %%i | findstr /B "FILES" >nul && (set str=%%i & (for /f "tokens=4 delims= " %%m in ("!str!") do ( echo %%m ))) ) endlocal pause0x02 文件目录示例 1.使用批处理快速创建目录以及复制文件到创建的子目录中 脚本示例: 代码语言:javascript复制@echo off @REM 批量创建的目录把createQuxian.cmd文件复制到个子目录中 @REM 博客地址 blog.weiyigeek.top mkdir delete other photo_bak photo_ksh photo_ksh.rar photo_ksh_backup photo_ksh_log photo_rar photo_rar_log photo_sfzh_f photo_sfzh_z temp demo for /f "delims=" %%N in ('dir /A:D /B') ^ do ( xcopy createQuxian.cmd %%N /y ) pause2.在批处理中使用dir命令进行全系统查找文件描述: 公司工作需要写DOS批处理代码,扩展思考了下如何查找文件,花了我很大精力才写出此脚本,因而记录下。 脚本示例: 代码语言:javascript复制@echo off @REM 变量延时绑定 setlocal enabledelayedexpansion @REM 请求输入文件名,支持通配符 set /p filename=请输入要查找的文化名: @REM 查看所有卷信息,赋值给变量,^表示换行符 for /f "delims=^" %%i in ('fsutil fsinfo drives') do ( set juaninfo=%%i ) @REM echo显示所有卷信息 echo %juaninfo% @REM 遍历所有卷查找文件 for %%i in (%juaninfo%) do ( echo %%i | findstr [A-Z]>nul && (set n=%%i & set target=!n!%filename% & set "target=!target: =!" & dir !target! /s /q) )执行结果: 代码语言:javascript复制# 关键脚本脚本解释: A. set n=%%i:表示将for循环得到的字符重新赋值给变量n; B. set target=!n!%filename% :进行字符串拼接,因为dir查找命令必须要带上盘符,所以我们把盘符信息拼接到文件名之前; C. set "target=!target:=!":进行字符替换,target冒号后面有个空格,B步骤拼接出来的字符串中间有空格,需要将空格去掉;---具体其搜索其他博文,这玩意也整了我好久; D. dir !target! /s /q:最后一步,借助dir进行文件查找,/S 表示递归指定目录及其子目录;3.使用批处理验证检查文件(清单)是否存在于某一目录描述: DOS下的BAT批处理操作往往提供一个文件清单,然后对文件清单进行操作,如压缩、FTP/FTPS发送到远端、删除等,如何判断此文件清单的文件是否存在呢?解决此问题就有了此文。 文件清单: filelist.txt 代码语言:javascript复制E:\document\code_new E:\java E:\picture\11.PNG E:\picture\12.PNG E:\picture\notexist.PNG脚本示例: 代码语言:javascript复制@echo off @REM 将当前路径Push到缓存区,实际上使用了exist来循环遍历验证文件是否存在,此时产生的文件就在脚本的同级目录 pushd %~dp0 set FILENAME=filelist.txt for /f "delims=^" %%i in (%FILENAME%) do ( if exist %%i ( echo %%i )else ( echo [Warning] %%i is no exist ) ) popd pause参考地址: https://blog.csdn.net/zhaogang1993/article/details/80779706 0x03 软件调用示例 0.利用批处理中指定bat使用管理员权限运行 脚本示例: 代码语言:javascript复制@echo off @REM 使用管理员权限运行批处理脚本 @REM 博客地址 blog.weiyigeek.top cd /d %~dp0 echo 正在使用管理权限打开 %1 脚本或者软件 start "" mshta vbscript:createobject("shell.application").shellexecute("""%1""","::",,"runas",1)(window.close)&exit # RunsWithAdmin.bat @echo off @REM 被调用的批处理脚本示例 cmd.exe执行结果: 1.使用批处理dump备份MySQL指定库示例演示: 代码语言:javascript复制@echo off @REM 数据库备份案例 title mysqldump example color 8a @REM 接收位置参数变量 set user=%1 set pass=%2 set database=%3 @REM 验证位置参数 if "%user%"=="" goto usage if "%pass%"=="" goto usage if "%database%"=="" goto usage set BackupFile=%database%-%date%-%time:~0,2%%time:~3,2%%time:~6,2%%time:~8,2%.sql @REM 备份到用户目录中 @REM C:\Users\WeiyiGeek\weiyigeek-2023-08-02-172836.8.sql mysqldump.exe -u %1 -p%2 %3 > %userprofile%\%BackupFile% echo Successful Export MySQL DatabaseSQL File. goto end :usage echo Usage:%0 -u User -pPass DatabaseName :end pause亲,文章就要看完了,不关注一下【全栈工程师修炼指南】吗? 2.使用批处理上传文件到FTP或者从FTP下载文件描述: 此处,脚本分为两部分,第一部分为可执行bat脚本,第二部分为ftp命令集合存放文件。 执行notepad命令打开记事本,将下述ftp命令集合存放文件到D:\ftp.txt。 代码语言:javascript复制@REM 下载文件 open 192.168.1.166 ftp-user passwd passive prompt off lcd D:\ftp cd /home/ftp-user mget * close @REM 上传文件 open 192.168.1.166 ftp-user passwd lcd D:\ftp cd /home/ftp-user mput * prompt on bye quit 执行批处理将执行在FTP中根据上述ftp指令进行下载或上传文件。 代码语言:javascript复制@echo off @REM 使用ftp指令进行下载或上传文件 ftp -s:D:\ftp.txt本文至此完毕,更多技术文章,尽情等待下篇好文! 原文地址: https://blog.weiyigeek.top/2023/7-29-625.html