批处理脚本时间戳变量没有空格YYYY-MM-DD-HH-MM-SS

时间:2017-08-02 16:09:08

标签: batch-file cmd timestamp filenames datetime-format

我已经在批处理脚本中创建了一个时间戳变量,如此...

set TIMESTAMP=%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%-%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%

虽然HH只是我得到的一个数字,但是有一个问题......

YYYY-MM-DD- 2-MM-SS

而不是

YYYY-MM-DD-02-MM-SS

如何在没有空格的情况下始终生成时间戳?

2 个答案:

答案 0 :(得分:2)

不要使用区域设置/用户设置相关的日期时间变量,而是wmic:

> SO_45465890.cmd
TIMESTAMP=2017-08-02-18-42-07

示例输出:

@Echo off
For /f %%A in ('powershell -NoP -C "get-date -f \"yyyy-MM-dd-HH-mm-ss\""') Do Set TimeStamp=%%A
Set TimeStamp

或者使用PowerShell并让它进行格式化:

import io
import sys
from enum import Enum


class Tee(io.StringIO):
    class Source(Enum):
        STDOUT = 1
        STDERR = 2

    def __init__(self, clone=Source.STDOUT, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self._clone = clone

        if clone == Tee.Source.STDOUT:
            self._out = sys.stdout
        elif clone == Tee.Source.STDERR:
            self._out = sys.stderr
        else:
            raise ValueError("Clone has to be STDOUT or STDERR.")

    def write(self, *args, **kwargs):
        self._out.write(*args, **kwargs)
        return super().write(*args, **kwargs)

    def __enter__(self):
        if self._clone == Tee.Source.STDOUT:
            sys.stdout = self
        else:
            sys.stderr = self
        self.seek(io.SEEK_END)
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        if self._clone == Tee.Source.STDOUT:
            sys.stdout = self._out
        else:
            sys.stderr = self._out
        self.seek(0)
        return False

答案 1 :(得分:0)

set "timestamp=%timestamp: =0%"

用零替换空格。

请参阅文档提示中的set /?