【问题标题】:What does %date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2% mean?%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2% 是什么意思?
【发布时间】:2016-07-08 22:28:43
【问题描述】:

我有这部分脚本创建一个名为 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


【解决方案1】:

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

例如;

SET PATH=%PATH%;C:\MyStuff

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

SET FRIEDRICE=YES

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

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

在过去,AUTOEXEC.BAT 常用于设置基本操作环境。

编辑

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

【讨论】:

    【解决方案2】:

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

    在上一个帮助页面上解释了 %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% 显然是年份的当前语言环境日期的最后 4 个字符,
    • %date:~-10,2% 附加当前语言环境日期右侧的第十个和第九个字符,这很可能是月份,
    • 附加%date:~-7,2% 当前语言环境日期右侧的第七和第六个字符,最有可能是当天,
    • YYYYMMDD 格式的日期和HHmm 格式的时间之间添加下划线作为分隔符,
    • 附加%time:~0,2% 当前语言环境时间的前 2 个字符,显然是小时,
    • 附加%time:~3,2%当前语言环境时间的第四和第五个字符,显然是分钟和
    • 附加文件扩展名.bak

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 2016-10-25
      • 2023-03-17
      • 1970-01-01
      • 2019-11-02
      • 2014-11-24
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多