【问题标题】:Windows command line script has embedded blank character [duplicate]Windows命令行脚本嵌入了空白字符[重复]
【发布时间】:2026-02-04 09:50:01
【问题描述】:

我想将一个文件复制到另一个包含时间和日期的文件 以它的名义。

我使用下面的语句,但问题是早于上午 10 点的时间值(小时值只有一个数字)有一个空白字符而不是前导零,这是我想要的。

copy  "M:\Production Schedule.xlsm" m:\gsdBackups\ProductionSchedule%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%%time:~6,0%.xlsm

在上面的示例中,当我在 9:50 运行它时,我得到了结果名称:

GSDProductionSchedule20180509_ 950.xlsm

我不理解上述复制命令中的所有格式。而不是下面的“950”,我想要“0950”

【问题讨论】:

    标签: variables cmd command line environment


    【解决方案1】:
    • 作为一项重复性任务,这应该是一个隐藏详细信息的批处理文件。
    • 使用 wmic 或 PowerShell 以用户设置/区域独立格式获取日期/时间
    • 将批处理文件命名为任何扩展名为 .bat 或 .cmd 的名称,并将其放在路径中的文件夹中

    :: Q:\Test\2018\05\09\SO_50256566.cmd
    @echo off
    Set "Src=M:\Production Schedule.xlsm"
    Set "Dst=M:\gsdBackups"
    
    :: Get date and time in a user settinhs/locale independent format
    For /f %%Y in ('
    powershell -NoP -C "(get-date).AddDays(0).ToString('yyyyMMdd_HHmm')"
    ') Do Set _DT=%%Y
    
    :: get source and use for variable modifiers to get name extension separated
    For %%F in ("%Src%") Do echo copy "%%~F" "%Dst%\%%~nF_%_DT%%%~xF"
    

    样本输出:

    > SO_50256566.cmd
    copy "M:\Production Schedule.xlsm" "M:\gsdBackups\Production Schedule_20180509_1743.xlsm"
    

    如果您觉得没问题,请删除副本前面的 echo

    【讨论】: