【问题标题】:Windows CMD - How to create time variable with AM PMWindows CMD - 如何使用 AM PM 创建时间变量
【发布时间】:2018-07-22 20:36:19
【问题描述】:

如何在 Windows 命令行 (CMD) 中创建使用以下格式的变量:

MON-DAY-YEAR_TIME-AM(或 PM)

set mon=%DATE:~4,2%
set day=%DATE:~7,2%
set yr=%DATE:~10,4%

> echo %mon%-%day%-%yr%
02-12-2018    # Good so far now I need to add time

尝试将 TIME /T (10:54 AM) 的输出设置为变量,以便我可以将其与上述日期一起使用。我怎样才能做到这一点?

> TIME /T
10:54 AM

不是我要找的:

>set mytime=TIME /T

>echo %mytime%
TIME /T

【问题讨论】:

标签: windows batch-file cmd


【解决方案1】:

改用WMIC OS GET LOCALDATETIME

FOR /F "skip=1" %%A IN ('WMIC OS GET LOCALDATETIME') DO (SET "t=%%A" & GOTO break_1)
:break_1

SET "m=%t:~10,2%" & SET "h=%t:~8,2%" & SET "d=%t:~6,2%" & SET "z=%t:~4,2%" & SET "y=%t:~0,4%"
ECHO %z%-%d%-%y%_%h%:%m%

输出:02-12-2018_17:27

----------------------------------------------- -------------------------------------------------- --------

如果您出于某种原因不喜欢 24 小时格式,请使用:

SETLOCAL EnableDelayedExpansion

FOR /F "skip=1" %%A IN ('WMIC OS GET LOCALDATETIME') DO (SET "t=%%A" & GOTO break_1)
:break_1
SET "m=%t:~10,2%" & SET "h=%t:~8,2%" & SET "d=%t:~6,2%" & SET "z=%t:~4,2%" & SET "y=%t:~0,4%"
IF !h! GTR 11 (SET /A "h-=12" & SET "ap=P" & IF "!h!"=="0" (SET "h=00") ELSE (IF !h! LEQ 9 (SET "h=0!h!"))) ELSE (SET "ap=A")

ECHO %z%-%d%-%y%_%h%:%m%-%ap%M

输出:02-12-2018_05:27-PM


如果您不想在个位数小时前添加额外的 0,请使用:

FOR /F "skip=1" %%A IN ('WMIC OS GET LOCALDATETIME') DO (SET "t=%%A" & GOTO break_1)
:break_1
SET "m=%t:~10,2%" & SET "h=%t:~8,2%" & SET "d=%t:~6,2%" & SET "z=%t:~4,2%" & SET "y=%t:~0,4%"
IF "%h%"=="00" (SET "h=0") ELSE (IF %h% LEQ 9 SET "h=%h:0=%")
IF %h% GTR 11 (SET /A "h-=12" & SET "ap=P") ELSE (SET "ap=A")

ECHO %z%-%d%-%y%_%h%:%m%-%ap%M

输出:02-12-2018_5:27-PM

【讨论】:

  • 是否有可能获得上午/下午?
  • @jes516 如果您刷新页面/帖子... ^^
  • @jes516 有一个小错误,12 AM12 PM,反之亦然。刚刚修好了! :)
  • 您的两组代码都输出小时的前导零
  • @Squashman 不,SET /A "17-12" 的结果是 5 而不是 05
【解决方案2】:

另一种可靠且独立于语言环境的方法是使用 PowerShell。

FOR /F %%t IN ('powershell -NoProfile -Command "Get-Date -UFormat '%I:%M %p'"') DO (
    SET "mytime=%%t"
)

ECHO %mytime%

【讨论】:

  • 试图为这个特定的脚本远离 powershell。无论出于何种原因,在复制正在写入的文件时,powershell 都不能很好地发挥作用。即使从 powershell 中调用 robocopy 有时也会挂起,这就是我将它们移至批处理脚本的原因。我有一个powershell脚本在压缩文件并删除原件之后进入。
  • 在复制仍在写入的文件时,我看不出使用 cmd.exe .bat 脚本会如何做得更好。祝您选择顺利。
  • 我没有说它更好。从 powershell 中调用 cmd 命令是常见的做法吗?我拥有的那个 powershell 脚本并没有通过任务计划程序为我完成。手动运行。探索所有选项...
  • 必要时,可以从 PowerShell 调用其他可执行文件。请参阅& 调用运算符。
猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 2022-10-04
  • 2023-03-16
相关资源
最近更新 更多