批处理脚本-实战

模拟进度条
效果图如下:
在这里插入图片描述

@echo off
mode con cols=113 lines=15 color 9f
cls
echo.
echo 程序正在初始化. . .
echo.
echo ┌──────────────────────────────────────┐
for /L %%i in (1,1,23) do (
    set /p a=■<nul 
    ping /n 2 10.86.22.144>nul
	)
echo 100%%
echo └──────────────────────────────────────┘
pause

::set /p a=■<nul     只显示提示信息“■”且不换行,也不需手工输入任何信息,这样可以使每个“■”在同一行逐个输出
::ping /n 1 10.86.22.144>nul   发送1次请求到10.86.22.144。“>nul”就是屏蔽掉ping命令所显示的内容。

生成5个100以内的随机数
在这里插入图片描述

@echo off
::%RANDOM% 系统变量 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
::2的15次方等于32768,上面的0~32767实际就是15位二进制数的范围。
::那么,如何获取100以内的随机数呢?很简单,将%RANDOM%按100进行求余运算即可,见例子。

:begin
setlocal enabledelayedexpansion
for /L %%i in (1 1 5) do (
set /a randomNum=!random!%%100
echo 随机数:!randomNum!
)
echo.
pause
goto begin

利用for语句L
1、打印5个数字
2、打开2个DOS窗口
3、创建/删除文件夹

在这里插入图片描述

@echo off

::格式:FOR /L %variable IN (start,step,end) DO command [command-parameters] 
::该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step 

echo 1.打印1 2 3 4 5这5个数字:
for /l %%i in (1,1,5) do echo %%i
echo.

echo 2.打开2个DOS窗口:
for /l %%i in (1,1,2) do start cmd
echo.

echo 3.建立从1~3共3个文件夹:
for /l %%i in (1,1,3) do md %%i
echo.

echo 4.删除从2~3共2个文件夹:
for /l %%i in (2,1,3) do rd /q %%i
echo.


pause

for语句示例

@echo off

::FOR /F [\"options\"] %%variable IN (file-set) DO command [command-parameters]
::FOR /F [\"options\"] %%variable IN ("string") DO command [command-parameters]
::FOR /F [\"options\"] %%variable IN ('command') DO command [command-parameters]
::默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。跳过空行。

::eol=c 忽略(隐藏、屏蔽)开头字符是C的行。
::delims是分割标示属性;
::skip表示开始读取之前跳过的行数,skip=n 忽略前N行

::tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定mth。
::如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。经测试,该参数最多只能区分31个字段。
::tokens=有时表示提取全部。 
::tokens=m表示提取第m列。 
::tokens=m,n表示提取第m列和第n列。 
::tokens=m-n表示提取第m列至第n列。 
::Tokens=*表示删除每行前面的空格。忽略行首的所有空格。 
::tokens=m*提取第m列以后的所有字符,星号表示剩余的字符。 
::tokens=m,*提取第m列以后的所有字符,星号表示剩余的字符。

::file-set表示文件,但不能含有空格  双引号表示字符串,即"string"   单引号表示执行命令,即'command'

rem 首先建立临时文件test.txt
echo ;注释行,这是临时文件,用完删除 >test.txt
echo 11段 12段 13段 14段 15段 16段 >>test.txt
echo 21段,22段,23段,24段,25段,26段 >>test.txt
echo 31段-32段-33段-34段-35段-36段 >>test.txt
echo 1.显示test.txt全部内容,包括注释行:
::该命令没有添加分号;也是可以的 for /f "eol= delims=" %%i in (test.txt) do echo %%i
for /f "eol=; delims=" %%i in (test.txt) do echo %%i
echo.
::eol=; 分号开头的行为注释行
::tokens=1,3* 将每行第1段,第3段和剩余字段分别赋予变量%%i,%%j,%%k
::delims=,- (减号后有一空格)以逗号减号和空格为分隔符,空格必须放在最后
echo 2.输出解析后的内容:
FOR /F "eol=; tokens=1,3* delims=,- " %%i in (test.txt) do echo %%i %%j %%k
echo.

echo 3.列出本机全部账号
for /f "delims=" %%i in ('net user') do echo %%i

::Del test.txt
echo.
pause

for语句示例D

@echo off

::FOR /D %%variable IN (set) DO command [command-parameters]
::/D参数只能显示当前目录下的目录名字
::set 指定集合。可以使用通配符(*?)  *号表示任意N个字符,而?号只表示任意一个字符

echo 列举当前目录下的文件夹名称:
for /d %%i in (*) do echo %%i
echo.

echo 列举指定D盘目录下的文件夹名称:
for /d %%i in (D:\*) do echo %%i
echo.

echo 列举指定D盘目录下名字只有1-3个的字母或文字:
for /d %%i in (D:\???) do echo %%i
echo.

echo 列出当前目录下,目录前3个字母为tes,共4个字符的目录:
for /d %%i in (tes?) do echo %%i
echo.

pause

for语句示例-搜索文件存在的目录

@echo off
setlocal EnableDelayedExpansion
::格式:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] 
::set中的文件名如果含有通配符(?或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。 
::set中如果为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录)(并在后面加上具体的文件名),而不管set中的指定文件是否存在。

echo 1.列举指定目录及子目录下面全部的SQL文件:
set num=1
::for /r E:\improve\bat\test %%i in (*.sql) do (echo !num!, %%i && set /a num+=1)
for /f "delims=" %%i in ('dir /a-d/b *.sql') do (echo !num!, %%i && set /a num+=1)
echo.

echo 2.将E盘所有目录并输出list到 E:\improve\bat\list.txt:
for /r e:\ftptemp %%i in (boot.ini) do echo %%i >>e:\improve\bat\list.txt
echo 输出list成功到E:\improve\bat\list.txt
echo.

::for /f  用f来实现显示文件内容
echo 2.2.列举E:\improve\bat\list.txt文件内容:???????????   
cd /d e:\improve\bat
for /r %%a in (*.*) do echo %%~fc >>e:\improve\bat\list.txt
echo.

echo 3.列举E盘所有目录:
for /r e:\ftptemp %%i in (1) do echo %%i 
echo.

echo 4.很好的搜索命令,列举boot.ini存在的目录:
for /r E:\ %%i in (boot.ini) do if exist %%i echo %%i
echo.

pause

输出唐诗一首_每行闪动多次

@echo off
setlocal enabledelayedexpansion
set str=床前明月光 疑是地上霜 举头望明月 低头思故乡
::定义字符串str
for %%i in (%str%) do (
rem 由于str中含有空格,则以空格为分隔符将str中的每一个部分依次赋给变量%%i。
set char=%%i
echo.
echo.
for /l %%j in (0,1,5) do (
set/p=!char:~%%j,1!<nul
rem 依次取出变量char中的每一个字符,并显示。
ping -n 0 127.0.0.1>nul
rem 设置输出每个字符的时间延迟。
)
call :hero %%i
)
pause>nul
exit
:hero
for /l %%k in (1,1,10) do (
ping /n 0 127.0.0.1>nul
set /p a=<nul
set /p a= <nul
set /p a=<nul
ping /n 0 127.0.0.1>nul
set /p a=%1<nul
)
::文字闪动
goto :eof
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值