1

我目前在我的桌面上的批处理文件 Backup.bat 中有以下代码。它用于每天备份一个excel电子表格文件,并通过附加当前日期和时间来重命名它。File.xlsx被复制并粘贴到一个新文件夹中作为文件 Sun-06-24-2012 23.21.46PM.xlsx

目前日期和时间附加为 Sun- 06-24-2012 23 .21.46PM.xlsx 但我希望使用 12 小时制将其附加为 Sun- 06-24-2012 11 .21.46PM.xlsx 而不是24 小时时钟格式。

下面是我目前在 Windows XP Professional 中使用的代码。有谁知道如何以 12 小时时钟格式而不是 24 小时时钟格式附加时间,因为它目前在下面的代码中。

@For /F "tokens=1,2,3,4 delims=/ " %%A in ('Date /t') do @(
Set DayW=%%A
Set Day=%%B
Set Month=%%C
Set Year=%%D
Set All=%%A-%%B-%%C-%%D
)
@For /F "tokens=1,2,3 delims=:,. " %%A in ('echo %time%') do @(
Set Hour=%%A
Set Min=%%B
Set Sec=%%C
Set Allm=%%A.%%B.%%C
)
@For /F "tokens=3 delims=: " %%A in ('time /t ') do @(
Set AMPM=%%A
)

copy "C:\Temp\File.xlsx" "C:\Temp\DailyBackup\File %All% %Allm%%AMPM%.xlsx"
4

2 回答 2

2

我同意乔伊的评论,我认为你最好使用 24 小时格式。

此外,一旦将代码传输到使用不同日期和/或时间配置的另一台机器,您获取日期和时间的方法就会中断。

但是,不管怎样,这里...

您应该从单个 %TIME% 扩展中获取整个时间字符串。否则,您将面临在午夜之前获得小时:分钟:秒以及在午夜之后获得 AMPM 的风险。

放在@ECHO OFF顶部,然后你就不需要@在你的代码中到处撒播了。

@echo off
For /F "tokens=1,2,3,4 delims=/ " %%A in ('Date /t') do (
  Set DayW=%%A
  Set Day=%%B
  Set Month=%%C
  Set Year=%%D
  Set All=%%A-%%B-%%C-%%D
)
For /F "tokens=1,2,3 delims=:,. " %%A in ('echo %time%') do (
  set /a "Hour=100%%A%%100"
  set Min=%%B
  set Sec=%%C
)
if %Hour% geq 12 (
  set AMPM=PM
  set /a "Hour-=12"
) else set "AMPM=AM"
if %Hour% equ 0 set "Hour=12"
if %Hour% lss 10 set "Hour=0%Hour%"
set "Allm=%Hour%.%Min%.%Sec%%AMPM%"

echo on
copy "C:\Temp\File.xlsx" "C:\Temp\DailyBackup\File %All% %Allm%.xlsx"
于 2012-06-26T16:02:16.630 回答
1

Time /t以 24 小时格式为您提供时间,大概是因为这是您计算机区域设置的默认设置。

由于time /t似乎没有提供任何格式选项,最简单的方法可能是在批处理文件中添加一个额外的部分,以将 24 小时制转换为 12 小时制。

在您下方的某个地方,Set Hour=%%A您只需要:

  • 如果超过 12,则从小时中减去 12
  • 将“00”更改为“12”

例如:

If %Hour% gtr 12 (
Set /a Hour=%Hour%-12
)
If %Hour% == 00 (
Set Hour=12
)

/a 开关Set告诉它等号右边的值是要计算的数值表达式。

如果它从 1 到 9,这将使您在小时内没有前导零。您可以使用另一个if语句来解决这个问题,以添加前导零,或者可能有更优雅的方法!

于 2012-06-26T15:22:20.220 回答