1

У меня есть текстовый файл, содержащий много записей в следующем формате:

YYYY/MM/DD

Как бы вы преобразовали это в следующий формат?

YYYY-MM-DD

Этот файл содержит много записей даты, поэтому он должен изменить формат даты всех записей ...

Спасибо

3 ответа3

1

Очень легко это сделать с помощью гибридной утилиты JScript/batch REPL.BAT, которая выполняет поиск и замену регулярных выражений в stdin и записывает результат в stdout. Утилита представляет собой чистый скрипт, который работает на любой версии Windows начиная с XP; загрузка exe не требуется. REPL.BAT доступен здесь. Полная документация встроена в скрипт.

Предполагая, что REPL.BAT находится в вашем текущем каталоге или, что еще лучше, где-то в вашем 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

Регулярное выражение может быть скорректировано по мере необходимости, чтобы сделать поиск и заменить столько, сколько необходимо.

0

Используйте этот код. Он будет проходить через каждую строку input.txt и выводить обновленные строки в output.txt . Он будет искать строки с текущим годом и месяцем (в первом месяце могут возникнуть проблемы, если вы анализируете файлы прошлой ночи). Будут изменены только совпадающие строки, поэтому каждый / станет -

@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
        )

    )  
0

Если решения на основе сценариев вам не подходят (вы просматриваете файл в приличном текстовом редакторе), попробуйте регулярные выражения в операции поиска / замены:

Найти ([1-2][0-9][0-9][0-9])/([0-1][0-9])/([0-3][0-9]) или
Найти ([1-2]\d\d\d)/([0-1]\d)/([0-3]\d)

Заменить на \1-\2-\3

Для формата DD-MM-YYYY вы можете заменить на \3-\2-\1 .

Изменить: это решение с графическим интерфейсом. Пример использования Notepad2:Найти / заменить с помощью регулярного выражения в Notepad2

Редактировать: Некоторые текстовые редакторы, такие как Notepad++ и UltraEdit, имеют функции пакетной обработки, где вышеуказанная операция поиска / замены может быть применена ко многим файлам одним щелчком мыши.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .