%date~0,4%和 %time~0,2%等用法详解

在windows中,有个原始并且功能强大的批处理,好像是被人遗忘了,比如博主最近在一个项目中就用到它,非常好用。今天就和博主一直来看看用批处理生动生成每日的文件夹。

为了能正确地生成每天的日期文件夹,请先将本机时间的短日期格式设置为yyyy-MM-dd。

然后就开始写bat批处理文件了,新建一个bat文件,在里面写上:

@echo off
F:
CD dawn

set date=%date%
set "date=%date:/=-%"

if not exist %date% (
    MD %date%
)
::ECHO 目录F:/dawn/dawn_fir/%date%创建成功
::PAUSE
EXIT

这里做了一个设置,将日期中的/替换成了-,

如果说想一开机就自动地生成对应的文件夹,就在计划任务(taskschd.msc)中,将这个批处理文件做成一个计划任务即可。

比如在windowscmd命令行窗口执行date命令后这个环境变量的值为

当前日期:2014-09-01 星期六 或2014/09/01 周六

那么如下的各个操作的意义如下:
%date:~0,4% 表示从左向右指针向右偏0位,然后从指针偏移到的位置开始提取4位字符,结果是2014(年的值)
%date:~5,2%  表示指针从左向右偏移5位,然后从偏移处开始提取2位字符,结果是03(月的值)
%date:~8,2%  表示指针从左向右偏移8位,然后从偏移处开始提取2位字符,结果是01(日的值)
%date:~5%    表示指针从左向右偏移5位,然后提取所有的值
%date:~-5%   表示指针反方向偏移,从最右端开始,偏移5位,然后从指针处提取左边的所有数值。

注意:“2014-09-01星期六”是个字符串,在计算机里指针是从0开始计数的,所以这串字符的指针意义上的第5位是0,月份的0,取两位刚好是03.

同理,比如当前系统的time变量的值如下:

当前时间: 11:36:56.63

那么如下的各个操作的意义如下:
%time:~0,2%  表示从左向右指针向右偏0位,然后从指针偏移到的位置开始提取2位字符,结果是小时字段数值
%time:~3,2%  表示指针从左向右偏移3位,然后从偏移处开始提取2位字符,结果是分钟字段数值
%time:~6,2%  表示指针从左向右偏移6位,然后从偏移处开始提取2位字符,结果是秒字段数值
//创建时间命名的文件夹

md d:\%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%

--------分析------------

从set /?中提取的有关帮助:

%PATH:str1=str2%
会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。
要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。
"str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的
开始到 str1 剩余部分第一次出现的地方,都一直保持相配。

也可以为扩展名指定子字符串。
    %PATH:~10,5% 
会扩展 PATH 环境变量,然后只使用在扩展结果中从第 11 个(偏 
移量 10)字符开始的五个字符。如果没有指定长度,则采用默认 
值,即变量数值的余数。如果两个数字(偏移量和长度)都是负数, 
使用的数字则是环境变量数值长度加上指定的偏移量或长度。 
    %PATH:~-10% 
会提取 PATH 变量的最后十个字符。 
    %PATH:~0,-2% 
会提取 PATH 变量的所有字符,除了最后两个。

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

用%time:~0,2%%time:~3,2%%time:~6,2%时有个问题, 就是如果TIME 是00点的时候,电脑显示的是0 不是00所以TIME 0~2 就报错了。

例子:时间9:42:17

set fileDate=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%

for /f "tokens=1,2 delims=:" %%i in (‘time/t‘) do set t=%%i%%j

set fileDate2=%date:~0,4%%date:~5,2%%date:~8,2%%t:~0,4%%time:~6,2%

echo fileDate:%fileDate%

echo fileDate2:%fileDate2%

fileDate:20150112 94217(9前面是空格)
fileDate2:20150112094217

还有些设备的date显示是12/12/2015 周一

所以用以下方法格式化

set date=%date:~0,10%
set date=%date:-=%   //去掉日期中的-
set date=%date:/=%   //去掉日期中的/
set time=%time:~0,8%
set time=%time::=%   //去掉时间中的:

if "%time:~0,1%"==" " set "time=0%time:~1%"

---------------------
作者:icanlove
来源:CSDN
原文:https://blog.csdn.net/icanlove/article/details/42640329
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/johnhery/p/9941963.html

时间: 2024-10-16 20:21:57

%date~0,4%和 %time~0,2%等用法详解的相关文章

MySQL Server 5.0–安装及配置/MySQLInstanceConfig.exe用法详解

MySQL Server 5.0–安装及配置/MySQLInstanceConfig.exe用法详解 http://blog.csdn.net/feihong247/article/details/7791105 配置MySQL步骤: 1.       运行MySQL Server安装目录下bin/MySQLInstanceConfig.exe.出现如下所示的向导界面 . 点击"Next"进入下一步. 2.       如果MySQLInstanceConfig在MySQL Serve

Vue1.0用法详解

Vue.js 不支持 IE8 及其以下版本,因为 Vue.js 使用了 IE8 不能实现的 ECMAScript 5 特性. 开发环境部署 可参考使用 vue+webpack. 基本用法 1 2 3 4 5 6 7 8 9 10 11 <div id="app"> {{message}} <input v-model="message"> </div> new Vue({ ele: '#app', data: { message:

用Advanced Installer制作DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版详解

关于 DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版--------------------------------------------------------- 基于 官方原版的安装包 + http://www.cnblogs.com/tracky 提供的补丁DLL制作而成. 安装之后,直接就可以用了. 省心省事.不必再单独的打一次补丁包了. 本安装包和补丁包一样都删除了

%date~0,4%和 %time~0,2%等用法详解(转)

比如在windowscmd命令行窗口执行date命令后这个环境变量的值为当前日期:2014-09-01 星期六 或2014/09/01 周六那么如下的各个操作的意义如下:%date:~0,4% 表示从左向右指针向右偏0位,然后从指针偏移到的位置开始提取4位字符,结果是2014(年的值)%date:~5,2%  表示指针从左向右偏移5位,然后从偏移处开始提取2位字符,结果是03(月的值)%date:~8,2%  表示指针从左向右偏移8位,然后从偏移处开始提取2位字符,结果是01(日的值)%date

0. Java开发中的23种设计模式详解(转)

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

Rational Rose2007(v7.0)下载地址、安装及激活详解教程(图)

最近需要画uml图,之前用的是Rose 2003版的,由于好久没进去了,结果发现原来的激活又失效了,omg又要激活一次?2003的激活真的很烦..于是就去百度找新版的,由于很多链接都存在挂羊头卖狗肉的现象,以至于找了好久才找到资源.所以想出来分享一下.. 废话说得有点多了,进入正题,以下提供下载地址: Rational Rose 2007(v 7.0)(含激活文件):http://pan.baidu.com/share/link?shareid=467021&uk=421719222 激活文件l

OpenGL ES 3.0之Fragment buffer objects(FBO)详解(一)

片段操作图 这篇文章将介绍从写入帧缓冲和读取帧缓冲的方式. Buffers(缓冲) OpenGL ES支持三种缓冲: OpenGL ES •• Color buffer颜色缓冲 •• Depth buffer深度缓冲 •• Stencil buffer模板缓冲 创建缓冲区 OpenGL ES 是一个交互式的渲染系统,假设每帧的开始,你希望初始化所有缓冲区中数据的默认值.调用glClear 函数来清除缓冲区内容,参数mask 指定清除的缓冲区. 你可能不要求清除每一个缓冲区,不在同时清除它们.但如

Rational Rose2007(v7.0)下载地址、安装及激活详解教程

http://blog.csdn.net/skl_tz/article/details/8925152 最近需要画uml图,之前用的是Rose 2003版的,由于好久没进去了,结果发现原来的激活又失效了,omg又要激活一次?2003的激活真的很烦..于是就去百度找新版的,由于很多链接都存在挂羊头卖狗肉的现象,以至于找了好久才找到资源.所以想出来分享一下.. 废话说得有点多了,进入正题,以下提供下载地址: Rational Rose 2007(v 7.0)(含激活文件):http://pan.ba

Android 5.0 如何正确启用isLoggable(一)__使用详解

转自:http://blog.csdn.net/yihongyuelan/article/details/46409389 isLoggable是什么 在Android源码中,我们经常可以看到如下代码: [java] view plain copy //packages/apps/InCallUI/src/com/android/incallui/Log.java public static final String TAG = "InCall"; public static fina