【获得当前日期时间的方法】
@set now_date=%date:~0,4%%date:~5,2%%date:~8,2%
@set now_time_hour=%time:~0,2%
set hh=%now_time_hour%
if /i %hh% lss 10 (set hh=0%now_time_hour:~1,1%)
@set now_time_min_sec=%time:~3,2%%time:~6,2%
@set now=%now_date%_%hh%%now_time_min_sec%
注:now就是当前的日期时间
【复制目录】
xcopy %source_dir%/*.* %target_dir%/*.* /e/d/y
/e 复制目录、子目录,包括空目录
/d 复制源文件日期新与目标文件的。也就是只复制更新的部分
/y 自动确认
【变量延迟】
setlocal EnableDelayedExpansion
当修改一个变量的赋值时,但又希望在同一个复合语句中使用修改后的值时,就需要设置以上语句。否则读取到变量的值在复合语句中将保持不变。例如:
set var=abc
IF var==abc (
set var=123
echo %var%
echo !var!
)
!var! 表示使用延迟变量
【变量传参的一个坑】
如果你写了两个脚本,A调用B。
A.bat内容:
@set param_val=abc
@echo 1:param_val=%param_val%
call B.bat %param_val%
@echo 3:param_val=%param_val%
B.bat内容:
@set param_val=%1
set param_val=%param_val%def
@echo 2:param_val=%param_val%
-----------------
set datetime=%date%
set yy=%datetime:~0,4%
set mm=%datetime:~5,2%
set dd=%datetime:~8,2%
md %yy%%mm%%dd%
其中%date:~0,4%代表系统默认的时间格式“2010-02-25 周四”的前4个字符,即2010
%date:~5,2%代表第五个字符后的2个,也就是02
%date:~8,2%代表第八个字符后的2个,也就是25
%date:~10,5%代表第十个字符后的5个(前面有空格,中文占了2个字符),也就是周四
经过测试后发现,WIN7系统下,如果把第一句%date:~0,4%改成%date:~0,5%,也就是希望直接读取“2010-”,就会出现被切断成父子多个文件夹的情况,所以代码里修改成了“%date:~0,4%-”的方法才能实现,难怪如果直接写成WINXP的%date:~0,30%(读取所有字符)会被切断成多个文件夹了。
看来,WIN7还是存在许多兼容性问题