在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、使用 set 命令进行赋值SET [variable=[string]] 1、等号两边不要有空格正确写法
错误写法
2、变量值包含特殊字符需用双引号正确写法
错误写法
变量值设置为空可以清空变量值,实现变量初始化。 3、避免使用系统环境变量同名的自定义变量例如: path , date , errorlevel 等 4、语法可行但不推荐使用使用连等把多个变量赋值成数字 上面是dos界面下的写法,下面是批处理中的写法,主意是变量 示例1: 显示所有的变量的值 @echo off set pause 示例2: @echo off set var=我是值 echo %var% pause 请看 set var=我是值 ,这就是BAT直接在批处理中设置变量的方法! 二、使用 set /p 命令读取输入交互获取用户输入 @echo off set /p input=请输入一个字符串: echo,%input% pause 读取文件的第一行内容
输出字符串之后不产生换行 @echo off for %%i in (bat home) do ( echo,%%i ) pause 输出
@echo off for %%i in (bat home) do ( set /p =%%i<nul ) pause 输出
批处理光标回退(非cls清屏)动画效果演示 @echo off echo bbs.bathome.net set /p =光标回退(非cls清屏)动画效果演示:<nul for /l %%i in (1,1,10) do ( set /p =%%i<nul set /p =<nul ping -n 2 127.1 >nul ) echo, pause 三、使用 set /a 命令进行数学运算(1)等号右侧的变量可以省略百分号
八进制和十六进制转换成十进制很简单
BAT文件里面进行“取余”操作的时候需要使用两个百分号 @echo off set /a n=3%%2 echo %n% pause 逻辑运算的特殊字符需要使用双引号 @echo off set /a "m=1<<10" set /a n=1"<<"10 echo %m% %n% pause 四、使用 set /a 命令进行数学运算(2)不支持直接计算超大数(例如磁盘空间的计算)
不支持直接计算浮点数 批处理通过自己编写算法实现浮点计算 题目: 输入任意两个小数(小数点后最多为两位数),通过批处理输出两数的和、差、积、商 @echo off&setlocal enabledelayedexpansion set /p str=输入的两数为: set /a num_1=0,num_2=0,num=1,v=0 for %%a in (%str%) do ( set /a n+=1 for /f "tokens=1,2 delims=." %%b in ("%%a") do ( set "_!n!=%%b" if "%%c" equ "" ( set ".!n!=00"&set /a m+=1 if !m! equ 2 set "flag=a" ) else ( set "a=%%c00"&set "a=!a:~,2!" set ".!n!=!a!" ) ) ) for %%a in (+#h -#c) do ( for /f "tokens=1,2 delims=#" %%b in ("%%a") do ( if "%_1:~,1%" equ "-" set "k1=-" if "%_2:~,1%" equ "-" set "k2=-" set /a %%c1=_1%%b_2,%%c2=!k1!1%.1%%%100%%b!k2!1%.2%%%100 if !%%c1! lss 0 ( if !%%c2! leq -100 set /a %%c2+=100,%%c1-=1 ) else ( if !%%c1! equ 0 ( if !%%c2! lss 0 set "%%c1=-0"&set "a=!%%c2!"&set "%%c2=!a:-=!" ) else ( if !%%c2! lss 0 set /a %%c2+=100,%%c1-=1 ) ) if !%%c2! geq 100 set /a %%c2-=100,%%c1+=1 ) ) for %%a in (h2 c2) do ( set "a=!%%a!"&set "a=!a:-=!"&set %%a=!a! if !a! lss 10 set "%%a=0!a!" ) echo 其和为:%h1%.%h2%&echo 其差为:%c1%.%c2%&set /a n=0 if defined flag set ".1="&set ".2=" for %%a in (1 2) do ( if "!_%%a!" equ "0" ( set "_%%a="&set /a .%%a=1!.%%a!%%100 ) else ( if "!_%%a!" equ "-0" ( set "_%%a=-" ) else ( set "a=!_%%a!"&set "a=!a:-=!" set /a n+=1&call :lp ) ) if "!.%%a!" neq "" set "a=!.%%a!"&call :loop&set ".%%a=!a!" ) set /a num1=3-num_1+num_2,m=4-v if defined flag set /a m=0 if %num1% leq 0 set /a num1=2 for /l %%a in (1,1,%num1%) do set /a num*=10 set /a s=%_1%%.1%*num/%_2%%.2%,j=%_1%%.1%*%_2%%.2% if %j% lss 0 set "j=%j:-=%"&set "jk=-" if %s% lss 0 set "s=%s:-=%"&set "sk=-" if %m% neq 0 if "!j:~%m%!" equ "" set "j=0000%j%"&set "j=!j:~-%m%!" if %s% lss %num% set "s=%num:~1%%s%"&set "s=!s:~-%num1%!" if %m% neq 0 set "j=!j:~,-%m%!.!j:~-%m%,2!" set "s=!s:~,-%num1%!.!s:~-%num1%,2! for %%a in (s j) do ( set "a=!%%a!" if "!a:.=!" equ "!a!" ( set "%%a=!%%a!.00" ) else ( if "!a:~-2,1!" equ "." set "%%a=!%%a!0" ) if "!a:~,1!" equ "." set "%%a=0!%%a!" ) echo 其积为:%jk%%j%&echo 其商为:%sk%%s% pause>nul&goto :eof :lp set /a num_%n%+=1&set "a=%a:~1%" if defined a goto lp goto :eof :loop if "%a:~-1%" equ "0" set "a=%a:~,-1%"&set /a v+=1&goto loop 代码相当复杂,估计大家肯定会看得云里雾里,所以思来想去还 一、总体计算思路 二、对数值的处理 三、感言 在这次编写代码的过程中,本人深深感受到批处理在处理数值上的不足和缺陷 更多相关 批处理函数:大数字加减乘除、时期时间计算、数字排序、进制转换等 合理使用位运算可以简化代码、提高效率 位运算相关概念及批处理演示 https://www.ogeek.net/article/222968.htm https://www.ogeek.net/article/222971.htm 对于超大数、浮点数的计算,BAT调用VBS或PowerShell是相对简单的解决方法。 截取日期、时间之后进行 set /a 计算时08和09会被看做非法八进制数字,参考: https://www.ogeek.net/article/222980.htm https://www.ogeek.net/article/222991.htm 五、使用 set 命令进行字符串截取原始字符串 字符串截取 截取第一个到第三个字符
截取第二个到最后一个字符
截取倒数第四个到倒数第二个字符
截取最后两个字符
说明
六、使用 set 命令进行字符串替换set StrNew=%StrOld:SubOld=SubNew% 把字符串 bbs 替换成 www
把字符串 bbs 删掉
把第一字符 t 及其左侧所有字符全部删掉(统配符 * 的使用)
待替换的子字符串不区分大小写(可以利用这个特性实现字母大小写转换) @echo off setlocal enabledelayedexpansion REM 全部转换成大写字母 set str=http://bbs.BATHOME.net set up=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z for %%i in (%up%) do ( set str=!str:%%i=%%i! ) echo %str% pause 全部转换成小写字母 @echo off setlocal enabledelayedexpansion REM 全部转换成小写字母 set str=http://bbs.BATHOME.net set low=a b c d e f g h i j k l m n o p q r s t u v w x y z for %%i in (%low%) do ( set str=!str:%%i=%%i! ) echo %str% pause 七、set命令知识点(1)把命令结果赋值给变量UNIX/Linux Shell 支持命令替换 Windows BAT 借助重定向或者for语句来实现
bat @echo off REM 利用重定向把命令结果(单行字符串)赋值给变量 ping 127.0.0.1 | findstr "%%" > "%temp%\ping.txt" set /p PacketLoss=<"%temp%\ping.txt" echo %PacketLoss% pause shell
bat @echo off REM 利用for语句把命令结果(单行字符串)赋值给变量 for /f "delims=" %%i in ('ping 127.0.0.1 ^| findstr "%%"') do ( set "PacketLoss=%%i" ) echo %PacketLoss% pause 八、set命令知识点(2)显示以某字符开头的变量直接执行 set 命令可以显示系统环境变量
利用“排序”特性的完整代码演示 @echo off for %%i in (a.txt c.txt b.txt e.txt) do ( set #%%i=%%i ) for /f "tokens=2 delims==" %%i in ('set #') do ( echo %%i ) pause 在解决实际问题中的应用 https://www.ogeek.net/article/223002.htm https://www.ogeek.net/article/223004.htm https://www.ogeek.net/article/223007.htm 到此这篇关于批处理BAT脚本中set命令的使用详解(批处理之家Batcher)的文章就介绍到这了,更多相关set命令内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论