windows批处理脚本拆分run_dt = 1/3/2015 by" /"

时间:2016-02-15 11:23:36

标签: windows batch-file

条件成功我试图将日期分成" /"以下代码正在运行,但是当我将其保持在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看起来像set dd = !! date_only:/!mm!= !!不工作。如何在if条件中引用变量。

如果有更好的方法来获得dd mm yyyy?

感谢。

4 个答案:

答案 0 :(得分:1)

尝试这样:

@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

答案 1 :(得分:1)

你有描述%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!
)

如果您的问题中存在此代码未涵盖的问题,请描述

答案 2 :(得分:1)

更好的方法是使用if (csvdata.length > 0) { csvdata = JSON.parse( csvdata ); //parse it into JSON by doing JSON.parse console.log('Current CSV data Information: \n'); console.log(csvdata); for (var j = 0; j < csvdata.length; j++) { console.log(csvdata[j].Name); } }

这是一种更好的方法:

WMIC

自动添加月和日之前的前导0。

答案 3 :(得分:0)

@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

所以 - 如果条件为真,则使用=/作为分隔符来标记字符串,使用分配给%%a的标记2,3和4以及隐式%%b%%c

每月和每天添加100。然后取每个的最后2个字符。使用!var!因为我们需要变量的运行时值。

将变量连接到ddmmyyyy,然后显示结果。

当然,如果您要使用dd格式,则需要切换mmmm/dd/yyyy