首页 > 解决方案 > Windows 命令行脚本嵌入了空白字符

问题描述

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

我使用下面的语句,但问题是早于上午 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”

标签: variablescmdcommandlineenvironment

解决方案


  • 作为一项重复性任务,这应该是一个隐藏详细信息的批处理文件。
  • 使用 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副本前面的内容。


推荐阅读