此篇文章为作者在学习Batch批处理编程中,所编写或者收集整理的批处理示例,能极大的便于初学者作为入门学习的参照学习,从而快速入门到应用在工作实践中,这也是作者发布此篇文章的初心,希望针对大家有帮助,整理不易请点赞、在看与投币吧!
温馨提示: Windows Batch 批处理系列教程示例脚本可访问作者Github仓库中DevelopLearnig的项目,✈直达-> https://github.com/WeiyiGeek/DevelopLearnig/tree/main/TerminalScript/bat
0x00 数值运算示例
1.打印九九乘法表
描述: 在批处理中使用 SETLOCAL 和 set 与 FOR 命令,来展示使用批处理来打印四种样式的九九乘法表。
批处理示例
- 方式1
@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! <nul
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! <nul
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! <nul
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! <nul
if /I %%k==1 echo.
)
)
pause
- 方式2.
@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.
@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
后加入<nul
表示不换行。
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=<file.txt
(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%
# 8
3.使用批处理脚本提取文件中的某一列
描述:假设有文件内容如下,其以列表形式显示了不同文件夹中文件数量,要求提取清单列中最后一列的数字。
代码语言:javascript复制CHECK IS THERE ANY INTERFACE FILES IN I/O DIRS
-------------------------------------------------------------------------------
08 JUN 18 16:40:24
FILES IN ..BNK.DATAOFSDATAAIO.IN.DIR: 0
FILES IN OFS.IN: 0
FILES IN SWIFT.FTPF.DE.I.MS000: 0
FILES IN SWIFT.FTPF.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
pause
0x02 文件目录示例
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
)
pause
2.在批处理中使用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:documentcode_new
E:java
E:picture11.PNG
E:picture12.PNG
E:picturenotexist.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 "�tabase%"=="" goto usage
set BackupFile=�tabase%-�te%-%time:~0,2%%time:~3,2%%time:~6,2%%time:~8,2%.sql
@REM 备份到用户目录中
@REM C:UsersWeiyiGeekweiyigeek-2023-08-02-172836.8.sql
mysqldump.exe -u %1 -p%2 %3 > %userprofile%�ckupFile%
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。
@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