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

问题描述 投票:0回答:2
我有这部分脚本,它创建一个名为

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%

是什么意思?

windows batch-file
2个回答
26
投票
打开命令提示符窗口并运行

set /?

 输出命令 
SET 的帮助。

最后一个帮助页面解释说,在解析包含这些

dynamic

 变量引用的行时,
%DATE% 扩展为 当前语言环境日期
%TIME% 扩展为 当前语言环境时间

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

echo Date is: %DATE% echo Time is: %TIME%
或者另一种选择

echo %DATE% %TIME%
最好在上午 10:00 之前执行,以了解区域设置日期和时间字符串格式。日期是工作日吗?日期字符串中日、月、年的顺序是什么?时间是 12 小时还是 24 小时格式?时间总是两位数小时吗?

在命令

SET 的输出帮助中还解释了 %Variable:~X,Y%

 从字符串中的位置 
X
 获取变量值字符串的子字符串,长度为 
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_
    ,
  • 附加
  • %date:~-4,4%
     当前语言环境日期的最后四个字符,这显然是年份,
  • 附加
  • %date:~-10,2%
     当前语言环境日期右侧的第十个和第九个字符(最有可能是月份),
  • 附加
  • %date:~-7,2%
     当前区域设置日期右侧的第七个和第六个字符,最有可能是这一天,
  • 在格式为
  • yyyyMMdd
     的日期和格式为 
    HHmm
    ,
    的时间之间添加下划线作为分隔符
  • 附加
  • %time:~0,2%
     当前区域设置时间的前两个字符,这显然是 24 小时格式中始终为两位数的小时,
  • 附加
  • %time:~3,2%
     当前区域设置时间的第四个和第五个字符,显然是分钟和
  • 附加文件扩展名
  • .bak
可以通过在命令提示符窗口中执行来验证带有多个子字符串的变量定义的结果:

echo db_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%.bak
日期字符串中的子字符串引用是从右侧(字符串末尾)而不是左侧(字符串开头)完成的,以使定义独立于日期字符串开头存在或缺失的工作日。


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

例如;

设置路径=%PATH%;C:\MyStuff

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

设置炒菜=是

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

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

在过去的美好时光,AUTOEXEC.BAT 经常被用来设置基本的运行环境。

编辑

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

© www.soinside.com 2019 - 2024. All rights reserved.