批处理代码: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