|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Помогите написать батник для замещения-изменения содержимого txt файлов |
|
|
CMD/BAT - [решено] Помогите написать батник для замещения-изменения содержимого txt файлов
|
Новый участник Сообщения: 10 |
Привет!
Я не умею писать батники, поэтому прошу вас помочь. Нужен батник который будет все файлы 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
|
Профиль | Отправить PM | Цитировать loficous, пакетные файлы вообще очень хреново подходят для задач замены части содержимого файлов. Или WSH, или PoSH.
Цитата loficous:
|
|
Отправлено: 08:31, 08-08-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Цитата Iska:
они могут быть разного названия |
|
Отправлено: 06:16, 09-08-2018 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать loficous, не вижу в примерах файлов ни "|104|", ни '00000004|".
|
Отправлено: 08:13, 09-08-2018 | #4 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать можно и без них. мне нужен хотябы пример, может дальше я сам допру.
"Set find=APLT" "Set replace=1201" это понятно. но как сделать чтобы он обрабатывал все файлы? Цитата Iska:
|
||
Отправлено: 11:20, 09-08-2018 | #5 |
Пользователь Сообщения: 116
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Цитата loficous:
Скрытый текст
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
|
Профиль | Отправить PM | Цитировать Спасибо вам большое, очень выручили.
только объясните пожалуйста как указать путь точный? Цитата Iska:
Цитата Darkar25:
|
||
Последний раз редактировалось loficous, 10-08-2018 в 11:46. Отправлено: 11:21, 10-08-2018 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата loficous:
|
|
Отправлено: 11:32, 10-08-2018 | #9 |
Пользователь Сообщения: 116
|
Профиль | Отправить PM | Цитировать Цитата loficous:
Цитата loficous:
|
||
Отправлено: 11:46, 10-08-2018 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|