%date是什么日期:〜-4,4 %% date:〜-10,2 %% date:〜-7,2%_%time:~0,2 %% time:~3,2%是什么意思?

时间:2016-03-22 06:27:44

标签: windows batch-file

我有这部分脚本创建了一个名为fileName的变量,后来用它来命名文件。

set fileName=db_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%.bak

%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%是什么意思?

2 个答案:

答案 0 :(得分:9)

在命令提示符窗口中打开并在那里运行set /?输出命令 SET 的帮助。

在上一个帮助页面上解释了%DATE%在解析时解析了{{1>} 当前区域设置日期%TIME%当前区域设置时间包含那些环境变量引用的行。

日期和时间的格式取决于Windows区域和语言设置。因此,必须在命令提示符窗口中执行

echo Date is: %DATE%
echo Time is: %TIME%

或者

echo %DATE% %TIME%

最好在上午10:00之前执行,以了解区域设置日期和时间字符串格式。是工作日的日期吗?日期字符串中的日,月和年的顺序是多少?时间是12或24小时格式?时间总是两个小时吗?

在命令 SET 的输出帮助中,还解释了%Variable:~X,Y%来获取字符串中X的环境变量字符串的子字符串{{1}字符长度。

字符串中的第一个字符具有位置编号(字符索引)Y 0的负值表示字符串末尾(来自右侧)的X个字符。

X

定义名为set fileName=db_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%.bak

的变量
  • 以固定字符串fileName开头,
  • 附加db_当前区域设置日期的最后4个字符,显然是年份,
  • 附加%date:~-4,4%当前区域设置日期右侧的第十个和第九个字符,最有可能是月份,
  • 附加%date:~-10,2%当前区域设置日期右侧的第七个和第六个字符,最有可能是当天,
  • 在格式为%date:~-7,2%的日期与格式为YYYYMMDD的时间之间附加下划线作为分隔符,
  • 附加HHmm当前区域设置时间的前2个字符,显然是小时,
  • 附加%time:~0,2%当前区域设置时间的第四个和第五个字符,显然是分钟和
  • 附加文件扩展名%time:~3,2%

可以通过在命令提示符窗口中执行来验证具有多个子字符串的此变量定义的结果:

.bak

日期字符串中的子字符串引用是从右侧(字符串的结尾)而不是左侧(字符串的开头)完成的,以使定义在工作日独立或在日期字符串的开头缺失。

答案 1 :(得分:1)

在DOS中使用SET设置一个环境变量,以后可以直接或通过批处理文件检索其他DOS命令。

例如;

SET PATH =%PATH%; C:\ MyStuff

以上将C:\ MyStuff添加到路径中。

SET FRIEDRICE = YES

这将创建一个名为FRIEDRICE的环境变量,并将值设置为YES。

值集仅对当前命令提示会话有效,除非使用其他方法更永久地设置它。

在过去的好时光中,经常使用AUTOEXEC.BAT来设置基本的操作环境。

修改

Mofi的答案非常正确。在您的情况下,SET命令的右侧是将文件名(以后在某处使用)设置为当前环境变量。可悲的是,我误解了这个问题,并认为你在询问SET而不是正在设置的内容。 您可以通过在命令提示符下键入SET(不带参数)来测试SET命令。将回显当前环境变量。