从网上搜到批处理产生日期文件的办法
下面是实现的比较好的
批处理文件:
输出:
Afile=bak-20061219
Bfile=bak-113202
Cfile=bak-星期二 2006-12-19
于是备份bat就好写了
@echo off
echo 正在备份数据到网络驱动器。。。
set folder=%DATE%
md "y:%folder%"
copy d:DataBak*.BAK "y:%folder%"
echo 备份完毕。
@echo off
set AFile=bak-%DATE:~4,4%%DATE:~9,2%%DATE:~12,2%
set BFile=bak-%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
echo AFile=%AFile%.rar
echo BFile=%BFile%.rar
运行此批处理的结果:
AFile=bak-20060109.rar ------- 年月日 -- 8位
BFile=bak-140650.rar ---------- 时分秒 -- 6位
另:如果小时数只有一位数字,造成中间有空格而出错的问题,请使用如下方法补0
set hh=%time:~0,2%
if /i %hh% LSS 10 (set hh=0%time:~1,1%
&&我们在批处理中经常要遇到数字(值)的处理,下面我就简单讲一下批处理中数字(值)处理方法:
一、随机数
在系统变量中有一个随机取值的变量%random%,其为0-32767之间的十进制数字,利用这个变量我们就能取得我们想要的任一组随机数字(等下会说明方法)。
二、四则运算
如我们要对一个变量(数值)进行运算,则可使用set /a命令,如:set /a str+=1就是把变量str的数值加上1,同样只要把这个命令中的+改成-、*、/就可以完成对该数值的减1、乘1、除1运算了,而更重要的是我们可以通过set /a命令来进行四则运算,如:set /a str=5*6+4*3-2*7,也可以进行变量和变量间的四则运算,如:set /a str=%a%/%b%*%c%-%d%,但要注意一点:运算仅限于整数,如要对小数进行运算可先乘上10的n次方。
三、取余
所谓余数就是除数除以被除数剩下的值,在批处理中取余运算符是用%%来表示的,如:%random%%%56就是把不断地把随机数除以56取余数,得到的数值一定是处在0-55间的,那么我们只要set /a a=%random%%%56就能把变量a的值设定在0-55间(大家想一下为什么a不会等于56),如要把a设定在1-56间,则只需set /a a=%random%%%56+1,我们了解了这点是很重要的,如要随机设定一台机器的ip(假设4个数值都随机取定)则只需写下以下代码(设置部分略去):
四、去零
数值去零一般是运用在时间计算上,因时间显示一般都是两位不足两位的自动在个位前补零,如07:04:01,这就给我们在运算中带来麻烦,所以对时间进行运算应该先去零,方法其实也很简单,就是利用取余运算,如要对08去零则只在08前面加上10变成108再不断地除以10余数肯定是8,如时间变量a(值为08)的运算公式为:set /a a=10%a%%%10,但时间是有两位数的,因此要将上面的公式变为set /a a=100%a%%%100,现在我们对上面的07:04:01进行取零:
最后显示的结果就是7:4:1。
五、递加(减、乘、除)运算
在批处理中我们经常要用到递加(减、乘、除)的运算,那怎么实现呢?只有通过循环来实现,有两种循环的方法:一种是for循环,一种是goto循环。如我们要对一个数值5进行递加100次变成105,两种方法的代码如下:
1.for循环
2.goto循环
同理可实现递减、乘、除和重复四则运算。
我也就简单讲这么多了,主要是想给初学批处理的新手以自己微薄的帮助,还望各位高人予以补充和指教。
批处理 if条件语句 数值或者字符串的比较
《批处理入门手册》
三.高级语句篇
3.1 学习if条件语句
学习要点:
5种if语句的基本语法:
1。判断两个字符串是否相等,if "字符串1"=="字符串2" command 语句;
2。判断两个数值是否相等,if 数值1 equ 数值2 command 语句;
3。判断判断驱动器,文件或文件夹是否存在,if exist filename command 语句;
4。判断变量是否已经定义,if defined 变量 command 语句;
5。判断上个命令的返回值,if errorlevel 数值 command 语句。
补充1:if not 语句。
1。判断两个字符串是否相等,if"字符串1"=="字符串2" command 语句
注意:在"字符串1"=="字符串2"中,是两个连续的"="
例1,
执行后会要求你输入两个字符串,然后批处理判断它俩是否相同。
在判断字符串是否相等的时候,if是会区分大小写的,请看,
例2,
执行后会显示:输入的两个字符不相同
如果我们不想让它区分大小写,则可以加上/i 参数。再看下面这个例子,
例3,
这次执行后会显示:输入的两个字符相同
2。判断两个数值是否相等,if 数值1 equ 数值2 command 语句
语句中的equ 表示相等的意思,判断两个数值之间的大小关系还有以下关系符号:
中文含义 关系符 英文解释
等于equ equal
大于gtr greater than
大于或等于 geq greater than or equal
小于lss less than
小于或等于 leq less than or equal
不等于 neq no equal
我们还是来看个例子,
例4,
注意哦,批处理中的大于号,小于号,等于号等等都不能用:“>” “<” “=” 这些符号,而要用像"gtr"这类的。
☆注意:if 比较字符串与比较数字 之间的区别
它们的区别体现在引号""上面,请看下面的例子
【example 1】
执行的结果是:12竟然小于4哦?
【example 2】
执行的结果是:12当然不会小于4的!
为什么【example 1】中加了双引号""会出错呢?
原因如下:
如果要比较的两个元素加了双引号"",那么会被当成是字符的比较。两个元素作比较的流程是:先比较两个元素的首位,如果首位相同,再比较第二位,如果第二位相同,再比较第三位。。。依此,在【example 1】if "12" lss "4" 语句中,实质是1与4的比较,1当然小于4,所以执行了后面的命令:echo 12竟然小于4哦?
☆建议:如果是字符串的比较就使用双引号"" 是数字的比较就不用双引号了!
3。判断判断驱动器,文件或文件夹是否存在,if exist filename command 语句
我们来瞧瞧这个判断驱动器,文件或者文件夹是否存在的语句,这里if exist filename 是表示:存在 filename的意思。
例5,
这里是判断e: 是否存在!
例6,
这个例子是用来判断123.bat文件是否存在的,但并不严谨!如果123.bat是一个文件夹而不是一个文件时,上面的判断就不行了!那么如何判断指定的文件123.txt是否存在?请看:
先用dir的/a-d参数去除123.bat的目录属性,指定说明要搜索的123.bat是文件而不是文件夹,并把结果(包括正确和错误)屏蔽(>nul 2>nul),如果dir找到了文件123.bat,那么其errorlevel值(dir命令的退出编码)会被设为0,否则为1则是没有此文件。当然也可以用||和&&来判断。关于为什么要用if %errorlevel%==0 而不用if errorlevel 0呢?在后面if errorlevel中会有说明!