批量代码将时间从24小时更改为12小时

时间:2012-06-26 14:54:29

标签: batch-file windows-xp

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

目前日期和时间附加为Sun-06-24-2012 23 .21.46PM.xlsx但我希望将其添加为Sun-06-24-2012 11 .21.46PM.xlsx使用12小时时钟而不是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"

2 个答案:

答案 0 :(得分:2)

我同意Joey的评论,我认为你的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"

答案 1 :(得分: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
)

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

如果它从1到9出现,这将使你在小时内没有前导零。你可以用另一个if语句绕过这个来添加一个前导零,或者可能还有更多优雅的方法!