条件成功我试图分割date“/”和concat再次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 "%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! )
看起来像是因为delayedexpression的声明像设置dd = !! date_only:/!mm!=! 不工作。 如何获取if条件中的variables。
如果有更好的办法得到dd mm yyyy?
谢谢。
@ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET "dateparm=run_dt=1/3/2015" SET "isdatefound=true" IF "%isdatefound%"=="true" ( FOR /f "tokens=2,3,4delims==/" %%a IN ("%dateparm%") DO ( SET /a dd=100+%%a SET /a mm=100+%%b SET /a yyyy=%%c ) SET "dd=!dd:~-2!" SET "mm=!mm:~-2!" SET "ddmmyyyy=!dd!!mm!!yyyy!" REM echos to prove ECHO day dd=!dd! ECHO month mm=!mm! ECHO year yyyy=!yyyy! ECHO concat ddmmyyyy=!ddmmyyyy! ) GOTO :EOF
很难判断你的格式是dd / mm / yyyy还是mm / dd / yyyy。 看来,字符串run_dt=1/3/2015
dateparm
包含在dateparm
。
因此,如果条件为真,则使用=
和/
作为分隔符来标记字符串,使用分配给%%a
令牌2,3和4,并隐式地使用%%b
和%%c
。
每个月和每天添加100。 然后取每个的最后2个字符。 !var!
因为我们需要变量的运行时间值。
将变量连接到ddmmyyyy
然后显示结果。
当然,如果你的意思是使用mm/dd/yyyy
格式,你需要将dd
和mm
全部切换。
试试像这样:
@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
你没有描述%date_only%
变量的格式是什么,所以我认为它是DD / MM / YYYY。 这应该工作:
if "%isDateFound%" == "true" ( echo %isDateFound% set date_only=%dateparam:*dt= =% echo !date_only! for /F "tokens=1-3 delims=/" %%a in ("!date_only!") do ( set "dd=%%a" set "mm=%%b" set "yyyy=%%c" ) echo !dd! echo !mm! echo !yyyy! )
如果你的问题中有一点,这个代码不包括,请描述它 !
更好的方法是使用WMIC
:
这是一个更好的方法来做到这一点:
@echo off FOR /F "tokens=1-3" %%a IN ('WMIC Path Win32_LocalTime Get Day^,Month^,Year ^| findstr [0-9]') DO ( set "$Day=0%%a" set "$Month=0%%b" set "$Year=%%c" ) echo %$Year%%$Month:~-2%%$Day:~-2%
在月和日之前的前导0被自动添加。