![]() |
Парсинг txt фала через bat
Дан файл
D24034CD;28.01.2020 16:59:00;Выход; D2414664;28.01.2020 17:04:24;Выход; D2411Ф1B;28.01.2020 17:16:19;Выход; мне нужно заменить некоторые параметры в нем и заархивировать в 7-zip , у меня получился код Chcp 1251 @echo off setlocal enabledelayedexpansion Set infile=21.txt Set find=" Set replace= setlocal enabledelayedexpansion set COUNT=0 for /F "tokens=* delims=," %%n in (!infile!) do ( set LINE=%%n set TMPR=!LINE:%find%=%replace%! Echo !TMPR!>>TMP.TXT ) move TMP.TXT @echo off setlocal enabledelayedexpansion Set infile=TMP.TXT Set find= Set replace=; setlocal enabledelayedexpansion set COUNT=0 for /F "tokens=* delims=," %%n in (!infile!) do ( set LINE=%%n set TMPR=!LINE:%find%=%replace%! Echo !TMPR!>>TMP1.TXT ) move TMP.TXT @echo off setlocal enabledelayedexpansion Set infile=tmp1.txt Set find=выход Set replace=2 setlocal enabledelayedexpansion set COUNT=0 for /F "tokens=* delims=," %%n in (!infile!) do ( set LINE=%%n set TMPR=!LINE:%find%=%replace%! Echo !TMPR!>>TMP2.TXT ) move TMP.TXT move TMP.TXT @echo off setlocal enabledelayedexpansion Set infile=tmp2.txt Set find=вход Set replace=1 setlocal enabledelayedexpansion set COUNT=0 for /F "tokens=* delims=," %%n in (!infile!) do ( set LINE=%%n set TMPR=!LINE:%find%=%replace%! Echo !TMPR!>>TMP3.txt ) move TMP.TXT del tmp.txt del tmp1.txt del tmp2.txt 7z.exe a -tzip -ssw -mx1 -ppassword -r0 "путь к файлу\TMP3.txt" %DATE:~0,2%.%DATE:~3,2%.%DATE:~-4%_4800_01.7z Помогите его оптимизировать, а то получается каждый раз создаю 4 файла( |
Цитата:
|
Несколько замен в одном цикле (и в одном временном файле) можно сделать так:
CMD
Код:
@echo off |
bifidok1, не думали использовать для замены опвершел ? он умеет хорошо
|
К сожалению с повершелом совсем не дружу.
Цикл отрабатывает хорошо. |
bifidok1, что надо сделать-то, можете словами описать?
|
bifidok1,
В меру моего понимания
Код:
@Echo Off |
Нужно привести файл в нужный формат
Дано: "D310E3CD";"28.01.2020 16:59:00";"Выход"; "D3114664";"28.01.2020 17:04:24";"Выход"; "D3111B1B";"28.01.2020 17:16:19";"Выход"; "";"28.01.2020 17:16:23";"Выход"; "D310EC09";"28.01.2020 17:30:19";"Выход"; "D310EC00";"28.01.2020 17:30:21";"Выход"; "D3108B4A";"28.01.2020 17:31:44";"Выход"; "D3108B4A";"28.01.2020 17:31:44";"Выход"; "D3108B4A";"28.01.2020 17:31:45";"Вход"; "";"28.01.2020 17:32:16";"Выход"; конечный файл D310E3CD;28.01.2020;16:59:00;2;1 D3114664;28.01.2020;17:04:24;2;1 D3111B1B;28.01.2020;17:16:19;2;1 ;28.01.2020;17:16:23;2;1 D310EC09;28.01.2020;17:30:19;2;1 D310EC00;28.01.2020;17:30:21;2;1 D3108B4A;28.01.2020;17:31:44;1;1 ;28.01.2020;17:32:16;2;1 Вход заменяем на 1 Выход заменяем на 2 Добавляем в конец 1 Батник в принципе работает, проблема только как удалить строки у которых нет первого идентификатора, типо такого ;28.01.2020;17:16:23;2;1 |
Проще всего сделать "батник" через вызов Powershell:
Код:
powershell -command "(gc D:\temp\log.txt -Encoding utf8) -replace 'Выход','2' -replace 'Вход','1' -replace '$','1' -replace '\"' -replace ' ',';' ^|Set-Content D:\temp\log.txt" |
Нужно привести файл в нужный формат
Код:
@Echo Off |
Да, разделитель должен быть только ;
|
Поправил выше.
|
Время: 11:36. |
Время: 11:36.
© OSzone.net 2001-