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

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

Ответить
Настройки темы
CMD/BAT - [решено] Помогите написать батник для замещения-изменения содержимого txt файлов

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


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

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


Привет!
Я не умею писать батники, поэтому прошу вас помочь.
Нужен батник который будет все файлы txt считывать, и изменять в них значения.
Например:
в папке лежать 4 файла с названиями типа "Pays_000000003_2018_08_62018_08_6.txt"
содержание в них такого типа:

Date_id|Branch_id|Pay_type|Account_id|Serv_id|Serv_name|Sum_pay|Last_count
06/08/2018|APLT|0|000077183|5|Холодная вода и кан-ция|2*441,00||

Нужно чтобы батник сам заменял значения "APLT" на "1201";"awnb" на "2527"; "ibhb"на"2526"; "kasp" на "4000"; "kpst" на "4001";"|104|" на "|5|"; '00000004|" на "|5|", и так во всех файлах находящихся в папке.

Отправлено: 08:01, 08-08-2018

 

Ветеран


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

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


loficous, пакетные файлы вообще очень хреново подходят для задач замены части содержимого файлов. Или WSH, или PoSH.

Цитата loficous:
Например:
в папке лежать 4 файла с названиями типа "Pays_000000003_2018_08_62018_08_6.txt"
содержание в них такого типа:
Date_id|Branch_id|Pay_type|Account_id|Serv_id|Serv_name|Sum_pay|Last_count
06/08/2018|APLT|0|000077183|5|Холодная вода и кан-ция|2*441,00|| »
Упакуйте эти четыре файла в архив, каковой приложите к сообщению.

Отправлено: 08:31, 08-08-2018 | #2



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

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


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


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

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


Вложения
Тип файла: zip файлы.zip
(7.3 Kb, 4 просмотров)

Цитата Iska:
пакетные файлы вообще очень хреново подходят для задач замены части содержимого файлов. Или WSH, или PoSH. »
прикладываю файлы.
они могут быть разного названия

Отправлено: 06:16, 09-08-2018 | #3


Ветеран


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

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


loficous, не вижу в примерах файлов ни "|104|", ни '00000004|".

Отправлено: 08:13, 09-08-2018 | #4


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


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

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


можно и без них. мне нужен хотябы пример, может дальше я сам допру.
"Set find=APLT"
"Set replace=1201"
это понятно. но как сделать чтобы он обрабатывал все файлы?
Цитата Iska:
не вижу в примерах файлов ни "|104|", ни '00000004|". »

Отправлено: 11:20, 09-08-2018 | #5


Пользователь


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

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


я помню делал батник который перечитывает весь файл и заменяет в нём некоторые значения...при этом содержимое самого файла уходит в другой файл...это должно натолкнуть вас на какую-нибудь мысль...
код ниже.
Код
Код: Выделить весь код
set /a NUM=0
Set Lines=0
Set "file=input.txt"
Set "out=out.txt"
set NoTot=0
set NoFil=
for %%a in (%file%) do call :ChkFile %%a  
if %NoTot% == 0 goto start  
echo [ %NoFil% ] FILES NOT EXISTS!"
goto eos
:start
For /F "usebackq" %%L In ("%file%") Do (Set /A Lines+=1)
set /a c=0
echo File Start\n >%out%
:loop
set /a c=0
set /a NUM+=1
for /f "UseBackQ Delims=" %%A IN ("%file%") do (
  set /a c+=1
  if !c!==!NUM! set "line=%%A"
)
//здесь производим замену значений
set "line=!line:zamenyaem-eto=zamenyaem-na-eto!"
if "!NUM!"=="!Lines!" (goto finish)
echo !line! >>%out%
cls
echo !NUM! of !Lines!.
goto loop
:finish
cls
echo Finished!your text has saved in %out%
:eos
pause
:ChkFile
if exist %1 goto :eof  
set NoFil=%NoFil% %1  
set /a NoTot=%NoTot%+1  
goto :eof
endlocal

правда есть один минус....если строки длинные и их много процесс может затянуться на час ато и больше(я тестировал на строках длинной чуть больше 50-ти символов и количеством строк 8700.время работы составило 1 час)

Отправлено: 08:09, 10-08-2018 | #6


Ветеран


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

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


Цитата loficous:
но как сделать чтобы он обрабатывал все файлы? »
Например, так (на WSH):
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strSourceFolder

Dim objFSO
Dim objFile

Dim objRegExp
Dim objDictionary

Dim strContent

Dim strKey


If WScript.Arguments.Count = 1 Then
	strSourceFolder = WScript.Arguments.Item(0)
	
	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	
	If objFSO.FolderExists(strSourceFolder) Then
		Set objRegExp = WScript.CreateObject("VBScript.RegExp")
		
		With objRegExp
			.Pattern    = "Pays_[\d_]+\.txt"
			.IgnoreCase = True
		End With
		
		Set objDictionary = WScript.CreateObject("Scripting.Dictionary")
		
		With objDictionary
			.Add "APLT"      , "1201"
			.Add "awnb"      , "2527"
			.Add "ibhb"      , "2526"
			.Add "kasp"      , "4000"
			.Add "kpst"      , "4001"
			.Add "|104|"     , "|5|"
			.Add "|00000004|", "|5|"
		End With
		
		For Each objFile In objFSO.GetFolder(strSourceFolder).Files
			If objRegExp.Test(objFile.Name) Then
				WScript.Echo objFile.Path
				
				With objFSO.OpenTextFile(objFile.Path)
					strContent = .ReadAll()
					.Close
				End With
				
				For Each strKey In objDictionary.Keys
					strContent = Replace(strContent, strKey, objDictionary.Item(strKey), 1, -1, vbTextCompare)
				Next
				
				With objFSO.CreateTextFile(objFile.Path, True)
					.Write strContent
					.Close
				End With
			Else
				' Nothing to do
			End If
		Next
		
		objDictionary.RemoveAll
		Set objDictionary = Nothing
		Set objRegExp     = Nothing
	Else
		WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
		WScript.Quit 2
	End If
	
	Set objFSO = Nothing
Else
	WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>"
	WScript.Quit 1
End If

WScript.Quit 0

Целевая папка указывается параметром скрипта (также можно просто перетащить папку на скрипт в Проводнике). Имена файлов ожидаются в виде «Pays_<цифры и подчёркивания>.txt».
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:57, 10-08-2018 | #7


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


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

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


Спасибо вам большое, очень выручили.
только объясните пожалуйста как указать путь точный?
Цитата Iska:
Например, так (на WSH):
Скрытый текст
Целевая папка указывается параметром скрипта (также можно просто перетащить папку на скрипт в Проводнике). Имена файлов ожидаются в виде «Pays_<цифры и подчёркивания>.txt». »
извините мне нужен батник который будет не один файл считывать, а несколько. в конкретной папке
Цитата Darkar25:
я помню делал батник который перечитывает весь файл и заменяет в нём некоторые значения...при этом содержимое самого файла уходит в другой файл...это должно натолкнуть вас на какую-нибудь мысль...
код ниже. »

Последний раз редактировалось loficous, 10-08-2018 в 11:46.


Отправлено: 11:21, 10-08-2018 | #8


Ветеран


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

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


Цитата loficous:
извините мне нужен батник который будет не один файл считывать, а несколько. в конкретной папке. »
Так и сделано. «Конкретная папка» указывается параметром при вызове скрипта. Можете просто перетаскивать потребную папку прямо на скрипт (или на ярлык на скрипт) в Проводнике. В этой папке будут обработаны все файлы вида «Pays_<цифры и подчёркивания>.txt».

Отправлено: 11:32, 10-08-2018 | #9


Пользователь


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

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


Цитата loficous:
только объясните пожалуйста как указать путь точный? »
вместо input.txt поставьте путь\до\файла\filename.txt...

Цитата loficous:
извините мне нужен батник который будет не один файл считывать, а несколько. в конкретной папке. »
могу адаптировать тот батник что я скинул чтобы он все нужные файлы перебирал....

Отправлено: 11:46, 10-08-2018 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Помогите написать батник, копирующий файлы по дате изменения kirillius Скриптовые языки администрирования Windows 4 22-07-2014 17:31
CMD/BAT - [решено] Помогите написать батник Пароль на CMD galaxy_pirat@vk Скриптовые языки администрирования Windows 3 11-10-2013 16:34
CMD/BAT - Слияние содержимого txt файлов в один. rvm.luma Скриптовые языки администрирования Windows 4 07-09-2013 15:11
CMD/BAT - [решено] Помогите сделать батник для копирование файлов с удаленых ip Moksar Скриптовые языки администрирования Windows 4 30-09-2010 22:01
CMD/BAT - [решено] помогите написать батничек для копирования файлов anatoly_neo Скриптовые языки администрирования Windows 9 20-09-2010 15:11




 
Переход