logo
Home 冲级指南 运维必学

运维必学

  • 2026-02-04 19:39:52

本文为作者原创文章,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [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

Previous Post
广电封杀网络直播APP,老百姓不乐意了,有免费的干嘛要付费_手机网易网
Copyright © 2088 战力飙升活动特区 - 专属特权限时解锁 All Rights Reserved.
友情链接