批处理文件用昨天的日期替换日期

时间:2012-07-20 03:03:21

标签: date batch-file

我正在使用一个脚本来检测原始文件中的奇怪日期格式,并用昨天的日期替换它们。 这里是原始数据 假设昨天的日期是2012-07-19

INPUT.TXT

AAAAAAAA    0001-01-01-00.00.00.000000  Change Password RSO part
BBBBBBBB    0001-01-01-00.00.00.000000  Change Password RSO part
CCCCCCC     0001-01-01-00.00.00.000000  Set Nbr try of password
DDDDDDD     2012-07-19-09.44.25.634000  Change Password 

output.txt的

AAAAAAAA    2012-07-19-00.00.00.000000  Change Password RSO part
BBBBBBBB    2012-07-19-00.00.00.000000  Change Password RSO part
CCCCCCC     2012-07-19-00.00.00.000000  Set Nbr try of password
DDDDDDD     2012-07-19-09.44.25.634000  Change Password 

我是dos批处理文件的新手。然而,出来一个基本的策略,我将首先遍历每一行来检测这种情况(0001-01-01)实际上只有这种情况 然后我将日期替换为昨天。

我尝试编写代码如下

REM Code to Find YEsterday's date
set yyyy=

set $tok=1-3
for /f "tokens=1 delims=.:/-, " %%u in ('date /t') do set $d1=%%u
if "%$d1:~0,1%" GTR "9" set $tok=2-4
for /f "tokens=%$tok% delims=.:/-, " %%u in ('date /t') do (
for /f "skip=1 tokens=2-4 delims=/-,()." %%x in ('echo.^|date') do (
set %%x=%%u
set %%y=%%v
set %%z=%%w
set $d1=
set $tok=))

if "%yyyy%"=="" set yyyy=%yy%
if /I %yyyy% LSS 100 set /A yyyy=2000 + 1%yyyy% - 100

set CurDate=%mm%/%dd%/%yyyy%
set dayCnt=%1

if "%dayCnt%"=="" set dayCnt=1

REM Substract your days here
set /A dd=1%dd% - 100 - %dayCnt%
set /A mm=1%mm% - 100

:CHKDAY
if /I %dd% GTR 0 goto DONE
set /A mm=%mm% - 1
if /I %mm% GTR 0 goto ADJUSTDAY
set /A mm=12
set /A yyyy=%yyyy% - 1

:ADJUSTDAY
if %mm%==1 goto SET31
if %mm%==2 goto LEAPCHK
if %mm%==3 goto SET31
if %mm%==4 goto SET30
if %mm%==5 goto SET31
if %mm%==6 goto SET30
if %mm%==7 goto SET31
if %mm%==8 goto SET31
if %mm%==9 goto SET30
if %mm%==10 goto SET31
if %mm%==11 goto SET30
REM ** Month 12 falls through

:SET31
set /A dd=31 + %dd%
goto CHKDAY

:SET30
set /A dd=30 + %dd%
goto CHKDAY

:LEAPCHK
set /A tt=%yyyy% %% 4
if not %tt%==0 goto SET28
set /A tt=%yyyy% %% 100
if not %tt%==0 goto SET29
set /A tt=%yyyy% %% 400
if %tt%==0 goto SET29

:SET28
set /A dd=28 + %dd%
goto CHKDAY

:SET29
set /A dd=29 + %dd%
goto CHKDAY

    call :process <..\input.txt>> ..\output.txt

    :process 
     set line= 
     if "!line:~12,22!" neq "0001-01-01" goto process
    ## for /F between line:~12,22 do ( 
    ------------------------------------------------
    this part onward i not very sure already.
    intend to do a for loop each line replace "0001-01-01" to %yyyy%-%mm%-%dd% 


)

任何人都有想法请帮助!! 感谢

1 个答案:

答案 0 :(得分:1)

阅读HELP FORHELP SET;然后尝试这段代码让你开始......

@echo off
setlocal enabledelayedexpansion
set newdate=9999-99-99
for /f "tokens=*" %%a in (input.txt) do (
  set line=%%a
  set onlydate=!line:~12,10!
  if !onlydate!==0001-01-01 (
    echo !line:0001-01-01=%newdate%!
  ) else (
    echo !line!
  )
)
endlocal

FOR遍历input.txt中的所有行。然后,对于每一行,它提取位置12的日期子字符串,并检查日期是否为0001-01-01,在这种情况下,它用newdate变量的内容替换它。