Convertendo Formato de Data com Arquivo em Lote

1

Eu tenho um arquivo de texto contendo muitas entradas de data do seguinte formato:

YYYY/MM/DD

Como você converteria isso no seguinte formato?

YYYY-MM-DD

Este arquivo contém muitas entradas de data, então deve mudar o formato de data de todas as entradas ...

Obrigado

    
por DextrousDave 31.07.2013 / 20:55

3 respostas

1

É muito fácil usar um utilitário híbrido JScript / em lote chamado REPL.BAT que executa a pesquisa em regex e substitui o stdin e grava o resultado em stdout. O utilitário é puro script que é executado em qualquer versão do Windows a partir do XP; nenhum download exe necessário. O REPL.BAT está disponível aqui. A documentação completa está incorporada no script.

Supondo que o REPL.BAT está no seu diretório atual, ou melhor ainda, em algum lugar dentro do seu PATH:

@echo off
set "file=yourFile.txt"
type "%file%" | repl "(\d{4})/(\d\d)/(\d\d)" "$1-$2-$3" >"%file%.new"
move /y "%file%.new" "%file%" >nul

A expressão regular pode ser ajustada conforme necessário para tornar a pesquisa e a substituição tão específicas quanto forem necessárias.

    
por 01.08.2013 / 01:56
0

Use este código. Ele percorrerá cada linha de input.txt e exibirá as linhas atualizadas em output.txt . Ele procurará linhas com o ano e mês atuais (primeiro do mês, pode ter um problema se você estiver analisando os arquivos da noite anterior). Apenas as linhas correspondentes serão alteradas para que cada / se torne um -

@echo off
setlocal enabledelayedexpansion

    REM Works on any NT/2k machine independent of regional date settings
    REM courtesy of http://stackoverflow.com/questions/203090/how-to-get-current-datetime-on-windows-command-line-in-a-suitable-format-for-us
    SETLOCAL ENABLEEXTENSIONS
    if "%date%A" LSS "A" (set toks=1-3) else (set toks=2-4)
    for /f "tokens=2-4 delims=(-)" %%a in ('echo:^|date') do (
      for /f "tokens=%toks% delims=.-/ " %%i in ('date/t') do (
        set '%%a'=%%i
        set '%%b'=%%j
        set '%%c'=%%k))
    if %'yy'% LSS 100 set 'yy'=20%'yy'%
    set Today=%'yy'%-%'mm'%-%'dd'% 
    ENDLOCAL & SET v_year=%'yy'%& SET v_month=%'mm'%& SET v_day=%'dd'%

REM above stuff near beginning of code

REM Performs substitution only for strings that include this year and month.
    for /f "tokens=*" %%a in (input.txt) do (
        for /f "tokens=1" %%f in ('echo %%a ^| findstr %v_year% ^| find "%v_month%" /c') do set count=%%f
        if [!count!]==[1] (
            set outputline=%%a%
            set outputline=!outputline:/=-!
            echo.!outputline! >> output.txt
            REM output changed line
        ) else (
            echo.%%a >> output.txt
            REM output unchanged line
        )

    )  
    
por 31.07.2013 / 21:52
0

Se as soluções de script não são sua coisa (você está visualizando o arquivo em um editor de texto decente), tente expressões regulares em uma operação de localizar / substituir:

Encontre ([1-2][0-9][0-9][0-9])/([0-1][0-9])/([0-3][0-9]) ou
Encontrar ([1-2]\d\d\d)/([0-1]\d)/([0-3]\d)

Substituir por --

Para o formato DD-MM-YYYY , você pode substituir por -- .

Editar: Essa é uma solução de GUI. Exemplo usando o Notepad2 :

Edit:Algunseditoresdetextocomoo Notepad ++ e o UltraEdit tem recursos processamento em lote onde a operação de localizar / substituir acima pode ser aplicada a muitos arquivos com apenas um clique.

    
por 01.08.2013 / 10:07

Tags