CMD/BAT - Парсинг txt фала через bat
-
bifidok1
CMD/BAT - Парсинг 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 файла(
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 файла(
-
megaloman
Re: CMD/BAT - Парсинг txt фала через bat
Цитата bifidok1:
мне нужно заменить некоторые параметры в нем
Напишите, что Вы делаете со строками. С каждым из параметров. Разбираться с путанным кодом занудливо. ИМХО, это произведение оптимизировать - только портить
мне нужно заменить некоторые параметры в нем
CMD/BAT - Парсинг txt фала через bat
Напишите, что Вы делаете со строками. С каждым из параметров. Разбираться с путанным кодом занудливо. ИМХО, это произведение оптимизировать - только портить

-
bifidok1
-
iglezz
Re: CMD/BAT - Парсинг txt фала через bat
Несколько замен в одном цикле (и в одном временном файле) можно сделать так:
CMD
[spoiler]Код: [/spoiler]
CMD
[spoiler]Код: [/spoiler]
Код: Выделить всё
@echo off
chcp 1251 >nul
set infile=test1.txt
set outfile=test1a.txt
del /f /q "%outfile%" >nul 2>&1
set "find1=;"
set "replace1= "
set "find2=:"
set "replace2=_"
set "find3=."
set "replace4=_"
setlocal enabledelayedexpansion
for /F "tokens=* delims=" %%L in (%infile%) do (
set STR=%%L
set NEWSTR=!STR:%find1%=%replace1%!
set NEWSTR=!NEWSTR:%find2%=%replace2%!
set NEWSTR=!NEWSTR:%find3%=%replace3%!
echo !NEWSTR!>>"%outfile%"
)
7z.exe a -tzip test1.zip "%outfile%"-
Serguei Kouzmine
Re: CMD/BAT - Парсинг txt фала через bat
bifidok1, не думали использовать для замены опвершел ? он умеет хорошо
-
Serguei Kouzmine
Re: CMD/BAT - Парсинг txt фала через bat
К сожалению с повершелом совсем не дружу.
Цикл отрабатывает хорошо.
Цикл отрабатывает хорошо.
-
DJ Mogarych
-
megaloman
Re: CMD/BAT - Парсинг txt фала через bat
bifidok1,
В меру моего понимания
[spoiler]Код: [/spoiler]
В меру моего понимания
[spoiler]Код: [/spoiler]
Код: Выделить всё
@Echo Off
cls
>nul chcp 1251
Set "BoxIn=Z:\Путь к файлу"
Set "FileIn=Дан файл.txt"
Set "@R01="="
Set "@R02= =;"
Set "@R03=Выход=2"
Set "@R04=Вход=1"
Md "%BoxIn%\%~nx0.tmp"
>"%BoxIn%\%~nx0.tmp\%FileIn%" (FOR /F "usebackq delims=" %%s IN (`2^>nul More "%BoxIn%\%FileIn%"`) Do (
Set "Str=%%s"
FOR /F "usebackq tokens=1* delims==" %%q IN (`Set "@R"`) Do Call Set "Str=%%Str:%%r%%"
Call Echo %%Str%%
))
"C:\Program Files\7-Zip\7z.exe" a -tzip -ssw -mx1 -ppassword -r0 "%DATE:~0,2%.%DATE:~3,2%.%DATE:~-4%_4800_01.7z" "%BoxIn%\%~nx0.tmp\%FileIn%"
Rd /S /Q "%BoxIn%\%~nx0.tmp"
pause
Exit /B 0-
bifidok1
Re: CMD/BAT - Парсинг txt фала через bat
Нужно привести файл в нужный формат
Дано:
"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
Дано:
"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
-
DJ Mogarych
Re: CMD/BAT - Парсинг txt фала через bat
Проще всего сделать "батник" через вызов Powershell:
Код:
А что, надо убирать кавычки и разделять метку времени на две части?
Код:
Код: Выделить всё
powershell -command "(gc D:\temp\log.txt -Encoding utf8) -replace 'Выход','2' -replace 'Вход','1' -replace '$','1' -replace '\"' -replace ' ',';' ^|Set-Content D:\temp\log.txt"А что, надо убирать кавычки и разделять метку времени на две части?