Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Парсинг txt фала через bat

Ответить
Настройки темы
CMD/BAT - Парсинг txt фала через bat

Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


Дан файл
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

 

Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Цитата bifidok1:
мне нужно заменить некоторые параметры в нем »
Напишите, что Вы делаете со строками. С каждым из параметров. Разбираться с путанным кодом занудливо. ИМХО, это произведение оптимизировать - только портить

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:46, 29-01-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 352
Благодарности: 193

Профиль | Отправить 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
Благодарности: 51

Профиль | Отправить PM | Цитировать


bifidok1, не думали использовать для замены опвершел ? он умеет хорошо

Отправлено: 06:54, 30-01-2020 | #4


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


К сожалению с повершелом совсем не дружу.
Цикл отрабатывает хорошо.

Последний раз редактировалось bifidok1, 30-01-2020 в 08:23.


Отправлено: 08:14, 30-01-2020 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


bifidok1, что надо сделать-то, можете словами описать?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:58, 30-01-2020 | #6


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить 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


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


Проще всего сделать "батник" через вызов Powershell:
Код: Выделить весь код
powershell -command "(gc D:\temp\log.txt -Encoding utf8) -replace 'Выход','2' -replace 'Вход','1' -replace '$','1' -replace '\"' -replace ' ',';' ^|Set-Content D:\temp\log.txt"
А что, надо убирать кавычки и разделять метку времени на две части?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 30-01-2020 в 10:48.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:37, 30-01-2020 | #9


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Парсинг txt фала через bat

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход