将输出日期转换为另一种格式

将输出日期转换为另一种格式

批处理代码:echo %date%,输出:03/04/2024
我需要将输出转换为:April 03,2024
在 Powershell 中,我可以使用以下方法执行此操作:date -f 'MMMM dd,yyyy'

我需要在纯批处理中执行什么代码来执行此操作?
没有调用 Powershell

答案1

.bat文件将提取日期部分:

@echo off
setlocal enabledelayedexpansion

set "months= 1:Jan 2:Feb 3:Mar 4:Apr 5:May 6:Jun 7:Jul 8:Aug 9:Sep 10:Oct 11:Nov 12:Dec"

for /f "skip=1 tokens=1,2,3" %%A in (
  '"wmic path win32_localtime get day, month, year"'
) do if Not "%%B" == "" for /f %%M in ("!months:* %%B:=!") do (
    set "month=%%M"
    set "year=%%C"
    set "day=%%A"
)

echo day=!day! month=!month! year=!year!

答案2

我经常发现自己想在批处理文件中将当前日期和/或时间分解成各个部分。一个典型的例子是,我想每天创建一个输出文件,但我希望该文件是唯一的,这样它就不会影响昨天的输出文件。

以下是来自罗布·范德沃德展示如何执行此操作。通过解析“prompt $D $T”部分的标记,结合“date”命令输出的第二行标记,这将处理任何日期格式(例如 mm-dd-yy、dd-mm-yy 等)。它将日期和时间的七个组成部分(星期几、月、日、年、时、分和秒)放在七个变量(dow、mm、dd、yy、hh、min 和 ss)中。现在您可以对它们执行任何操作(当然是在 setlocal/endlocal 块内)。

@echo off

rem Create the date and time elements.
setlocal
For /f "tokens=1-7 delims=:./-, " %%i in ('echo exit^|cmd /q /k"prompt $D $T"') do (
    For /f "tokens=2-4 delims=/-,() skip=1" %%a in ('echo.^|date') do (
        set dow=%%i
        set %%a=%%j
        set %%b=%%k
        set %%c=%%l
        set hh=%%m
        set min=%%n
        set ss=%%o
    )
)

rem Uncomment the next line for debugging the date and time elements.
rem For %%i in (dow dd mm yy hh min ss) do set %%i

rem Example usage patterns:
If NOT "%dow%" == "Sun" Echo It's not Sunday.

echo Hello, world! > TestFile_%yy%%mm%%dd%_%hh%%min%%ss%.txt

pause
endlocal

这应该为你提供基础几乎你想要的一切。剩下的唯一一件事就是获取完整的月份名称“April”。我会继续努力的。

答案3

基于哈里麦克回答...

@echo off
setlocal enabledelayedexpansion
set months=01:Jan 02:Feb 03:Mar 04:Apr 05:May 06:Jun 07:Jul 08:Aug 09:Sep 10:Oct 11:Nov 12:Dec
for /f "tokens=1-3 delims=/-: " %%A in ("%date%"
) do for /f %%M in ("!months:* %%B:=!"
) do set month=%%M& set year=%%C& set day=%%A

echo before %date%
echo after  !month! !day!,!year!
pause 

输出:

before 05/04/2024
after  Apr 05,2024

相关内容