2012-07-20 181 views
0

我工作的腳本,檢測原始文件中奇怪的日期格式,並將其替換爲昨天的日期。 這裏的原始數據 假設昨天的日期是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% 


) 

任何人有想法,請幫助! 謝謝

+0

你的問題是什麼? – 2012-07-20 07:37:14

+0

嗨, 所以基本上我想要替換字符串,檢查不同的輸入和輸出之間.. 我寫一些在底部.. 的代碼,但無法fuilfill由於我在DOS批處理有限的知識.. 會感謝任何幫助謝謝... – cheeseng 2012-07-20 07:39:40

+0

再次,你的問題是什麼? – 2012-07-20 07:41:26

回答

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變量的內容替換它。

相關問題