DOS常用bat方法整理

 

【获得当前日期时间的方法】

@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%

大家可以猜猜3个位置输出的值都是什么?很难想象,第3个位置输出的是:abcdef。
发现BAT的一个问题,就是脚本间传递的参数,应该是地址传递的。如果理解成传值,就有的折腾了。
预防出现这样错误的办法:不要对传入的参数变量做修改,就可以避免发生杯具了。
我为这个问题折腾了半小时,汗啊,几千行的脚步里面爬这个问题。希望看到的人不再吃亏了

 

-----------------

 

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还是存在许多兼容性问题 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值