|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Парсинг txt фала через bat |
|
|
CMD/BAT - Парсинг txt фала через bat
|
Новый участник Сообщения: 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 файла( |
|
Отправлено: 18:18, 29-01-2020 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата bifidok1:
![]() |
|
------- Отправлено: 18:46, 29-01-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать Несколько замен в одном цикле (и в одном временном файле) можно сделать так:
CMD
@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%" |
Отправлено: 23:35, 29-01-2020 | #3 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать bifidok1, не думали использовать для замены опвершел ? он умеет хорошо
|
Отправлено: 06:54, 30-01-2020 | #4 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать К сожалению с повершелом совсем не дружу.
Цикл отрабатывает хорошо. |
|
Последний раз редактировалось bifidok1, 30-01-2020 в 08:23. Отправлено: 08:14, 30-01-2020 | #5 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать bifidok1, что надо сделать-то, можете словами описать?
|
------- Отправлено: 08:58, 30-01-2020 | #6 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать bifidok1,
В меру моего понимания
@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 |
------- Отправлено: 09:21, 30-01-2020 | #7 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Нужно привести файл в нужный формат
Дано: "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 |
Отправлено: 09:23, 30-01-2020 | #8 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Проще всего сделать "батник" через вызов Powershell:
А что, надо убирать кавычки и разделять метку времени на две части? |
------- Последний раз редактировалось DJ Mogarych, 30-01-2020 в 10:48. Отправлено: 09:37, 30-01-2020 | #9 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Нужно привести файл в нужный формат
@Echo Off cls >nul chcp 1251 Set "BoxIn=Z:\Путь к файлу" Set "FileIn=Нужно привести файл в нужный формат.txt" Md "%BoxIn%\%~nx0.tmp" >"%BoxIn%\%~nx0.tmp\%FileIn%" (FOR /F "usebackq tokens=1,2,3 delims=;" %%i IN (`2^>nul More "%BoxIn%\%FileIn%"`) Do Call :Out "%%~i" "%%~j" "%%~k") "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 :Out If %1=="" Exit /B 1 Set "Str=%~2" If /I %3=="Выход" Set "Str=%~1;%Str: =;%;2;1" If /I %3=="Вход" Set "Str=%~1;%Str: =;%;1;1" Echo %Str% Exit /B |
------- Отправлено: 09:56, 30-01-2020 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - [решено] Парсинг файла.txt | Elven | Скриптовые языки администрирования Windows | 4 | 29-11-2017 14:09 | |
CMD/BAT - CMD BAT редактирование txt | sis211 | Скриптовые языки администрирования Windows | 5 | 17-06-2016 15:50 | |
VBS/WSH/JS - Парсинг txt и отправка результата на php гейт | bugmenot3 | Скриптовые языки администрирования Windows | 11 | 15-10-2014 18:11 | |
не запускаются файлы txt, bat, | wawe | Тест-форум | 1 | 30-07-2012 16:39 | |
CMD/BAT - Парсинг XML/TXT | mxm199 | Скриптовые языки администрирования Windows | 10 | 17-07-2012 12:34 |
|