在条件成功的情况下,我试图用“/”拆分日期并再次连接为 01032015。以下代码有效,但是当我将其保持在 if 条件时,它失败了。
set date_only=%dateparam:*dt= =%
echo %date_only%
REM above line prevents unexpected results when input string has less than two /
set mm=%date_only:*/=%
echo !mm!
set yyyy=%mm:*/=%
echo !yyyy!
set dd=!date_only:/%mm%=!
echo !dd!
set dd=!dd:~3,2!
echo !dd!
set mm=!mm:/%yyyy%=!
echo !mm!
set yyyy=!yyyy:~0,4!
echo.%dd%
echo.%mm%
echo.%yyyy%
在if条件下,上面的内容变成了下面的内容
if "%isDateFound%" == "true" (
echo %isDateFound%
set date_only=%dateparam:*dt= =%
echo !date_only!
set mm=!!date_only:*/=!
echo month
echo !mm!
set yyyy=!!mm:*/=!
echo year
echo !yyyy!
set dd=!!date_only:/!mm!=!!
echo date
echo !dd!
set dd=!dd:~3,2!
set mm=!!mm:/%yyyy%=!
set yyyy=!yyyy:~0,4!
echo !dd!
echo !mm!
echo !yyyy!
)
由于延迟表达式,看起来像 set dd=!!date_only:/!mm!=!!不工作。如何在 if 条件下引用变量。
是否有更好的方法获取 dd mm yyyy ?
谢谢。
最佳答案
像这样尝试:
@echo off
set hour=%time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
echo hour=%hour%
set min=%time:~3,2%
if "%min:~0,1%" == " " set min=0%min:~1,1%
echo min=%min%
set secs=%time:~6,2%
if "%secs:~0,1%" == " " set secs=0%secs:~1,1%
echo secs=%secs%
set year=%date:~-4%
echo year=%year%
set month=%date:~3,2%
if "%month:~0,1%" == " " set month=0%month:~1,1%
echo month=%month%
set day=%date:~0,2%
if "%day:~0,1%" == " " set day=0%day:~1,1%
echo day=%day%
Set MaDate=%day%/%month%/%year%
Set MyTime=%hour%:%min%:%secs%
echo %MaDate%
echo %MyTime%
set DateTimeFile=%year%_%month%_%day%_%hour%_%min%_%secs%.log
echo DateTimeFile=%DateTimeFile%
pause
或者我从 foxidrive 得到了另一个解决方案:
::From foxidrive
@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set datestamp=%dt:~0,8%
set timestamp=%dt:~8,6%
set YYYY=%dt:~0,4%
set MM=%dt:~4,2%
set DD=%dt:~6,2%
set HH=%dt:~8,2%
set Min=%dt:~10,2%
set Sec=%dt:~12,2%
set stamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%
echo stamp: "%stamp%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
pause
关于Windows 批处理脚本将 run_dt=1/3/2015 拆分为 "/",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35408090/