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

Компьютерный форум 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

 

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


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

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


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

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



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

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


Ветеран


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

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


Цитата loficous:
Где в коде изменить чтобы указать путь к папке, не перетаскивая ее? »
Вообще-то, в коде — нигде.

Создайте пакетный файл, в котором напишите:
Код: Выделить весь код
@echo off
cscript.exe //nologo "Путь к скрипту" "Путь к папке"
Например, скрипт именуется Мой скрипт.vbs и находится по пути C:\Мои проекты\0180, обработать нужно каталог C:\Мои проекты\0180\0005. Тогда вторая строка будет выглядеть как:
Код: Выделить весь код
cscript.exe //nologo "C:\Мои проекты\0180\Мой скрипт.vbs" "C:\Мои проекты\0180\0005"
Это сообщение посчитали полезным следующие участники:

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


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


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

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


Благодарю Вас за помощь.
Цитата Iska:
Например, скрипт именуется Мой скрипт.vbs и находится по пути C:\Мои проекты\0180, обработать нужно каталог C:\Мои проекты\0180\0005. Тогда вторая строка будет выглядеть как: »

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


Ветеран


Contributor


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

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


Вот батник с привлечением js
Код: Выделить весь код
@set @E=1; /*
@Echo Off
	cls

       	Set "FileIn=Z:\Soft_In\Pays_*.txt"
	rem                                                                         1                   2                   3                   4                   5                   6               7
	FOR %%f IN ("%FileIn%") DO Call Cscript //NoLogo /E:jscript "%~dpnx0" "%%f" "\|APLT\|" "|1201|" "\|awnb\|" "|2527|" "\|ibhb\|" "|2526|" "\|kasp\|" "|4000|" "\|kpst\|" "|4001|" "\|104\|" "|5|" "\|00000004\|" "|5|"  

	pause
GoTo :Eof

*/
var oArg = WScript.Arguments;
var nArg = oArg.Count();
var nRep = Math.floor(nArg/2);

if (nArg <= 3 || nRep == nArg/2) {
	WScript.Echo("Error! Invalid number of arguments!");
	WScript.Quit(240);
}
var FText=oArg(0);

var FSO=WScript.CreateObject("Scripting.FileSystemObject");

var InFile;
try {InFile = FSO.OpenTextFile(FText,1);}
catch (e) {
   if (e !=0 ) {
	WScript.Echo("Error! " + FText + "  " + e.description);
       	WScript.Quit(240);
     }
}
var TextAll = InFile.ReadAll();
InFile.Close();

var ss,RegRep;           

for (var i = 1; i < nArg; i+=2) {
//	WScript.Echo(oArg(i) + "  " + oArg(i+1));
	TextAll=TextAll.replace(new RegExp(oArg(i),"ig"),oArg(i+1));
}

InFile = FSO.OpenTextFile(FText,2);
InFile.Write(TextAll);
InFile.Close();
В батнике в For для каждого файла вызывается js. При этом в вызове необходимо указать пары для замены
"\|заменяемое\|" "|замена|"
Количество пар произвольно
Я принципиально хотел сохранить символы | при поиске и замене, из опасения ложного срабатывания. Но, каюсь, не сумел написать регулярное выражение, если указывать в виде
"|заменяемое|" "|замена|", поэтому приходится писать "\|заменяемое\|"
Путь к файлам укажите свой.
Надеюсь, найдутся люди и натыкают меня носом, как это сделать.

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


Последний раз редактировалось megaloman, 10-08-2018 в 18:13.

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

Отправлено: 18:05, 10-08-2018 | #14


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


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

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


Цитата megaloman:
В батнике в For для каждого файла вызывается js. При этом в вызове необходимо указать пары для замены
"\|заменяемое\|" "|замена|"
Количество пар произвольно
Я принципиально хотел сохранить символы | при поиске и замене, из опасения ложного срабатывания. Но, каюсь, не сумел написать регулярное выражение, если указывать в виде
"|заменяемое|" "|замена|", поэтому приходится писать "\|заменяемое\|"
Путь к файлам укажите свой.
Надеюсь, найдутся люди и натыкают меня носом, как это сделать. »
Спасибо вам за ваши старания! Очень впечатлён отзывчивостью пользователей данного форума, если еще столкнусь с такими ситуациями обязательно обращусь.

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


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


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

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


Цитата Iska:
Вообще-то, в коде — нигде.
Создайте пакетный файл, в котором напишите:
Код:
@echo off
cscript.exe //nologo "Путь к скрипту" "Путь к папке"
Например, скрипт именуется Мой скрипт.vbs и находится по пути C:\Мои проекты\0180, обработать нужно каталог C:\Мои проекты\0180\0005. Тогда вторая строка будет выглядеть как:
Код:
cscript.exe //nologo "C:\Мои проекты\0180\Мой скрипт.vbs" "C:\Мои проекты\0180\0005" »
Здравствуйте!! только увидел ваше сообщение, и решил попробовать. попытка не увенчалась успехом, командная строка мелькает с надписью "ошибка ввода".

Отправлено: 13:01, 31-01-2019 | #16


Ветеран


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

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


Цитата loficous:
командная строка мелькает с надписью "ошибка ввода". »
Чтобы она не мелькала — сначала откройте её, а затем исполняйте в ней пакетный файл.

Отправлено: 18:54, 31-01-2019 | #17


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


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

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


Цитата Iska:
Чтобы она не мелькала — сначала откройте её, а затем исполняйте в ней пакетный файл. »
до меня дошло почему она так не запускалась.
дело в том, что в прописываемом пути не должно быть кирилицы (названия папок и самого скрипта).
как только я сделал так как вы сказали,сразу увидел что пишется в командной строке и выявил проблему.

вопрос можно ли какнибудь сделать так чтобы он принимал кирилицу, или нет?

Отправлено: 06:12, 01-02-2019 | #18


Ветеран


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

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


Цитата loficous:
опрос можно ли какнибудь сделать так чтобы он принимал кирилицу, или нет? »
Конечно, можно. Просто сохраняйте пакетный файл в кодировке OEM/866. Стандартный Блокнот для этого не годится.

Отправлено: 06:50, 01-02-2019 | #19


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


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

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


Цитата Iska:
Конечно, можно. Просто сохраняйте пакетный файл в кодировке OEM/866. Стандартный Блокнот для этого не годится. »
сейчас такая нелепая ситуация. не могу вспомнить как прописать путь так, чтобы он считывал из этой же папки (любой в какую его положишь)

Отправлено: 11:22, 01-02-2019 | #20



Компьютерный форум 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




 
Переход