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

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

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

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


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

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


Всем привет! Есть файл в котором есть много строк формата:

02|56873727|20131207011347|тексттексттекст
02|56873727|20131207011347|тексттексттекст
02|56873727|20131207011347|тексттексттекст (где 2013-год,12-месяц,07-число и 01-час,13-минут,47-секунд)

нужно чтобы батник находил в каждой строке время: 011347 и заменялего на случайное. т.е. задать маски с диапозонами чисел для формирования времени: ([0-2] [0-4]-часы, [0-5] [0-9]-минуты, [0-5] [0-9]-секунды ) .
чтобы в итоге получилось:
02|56873727|20131207134523|тексттексттекст
02|56873727|20131207013515|тексттексттекст
02|56873727|20131207232755|тексттексттекст

Готов отблагодарить финансово!

Спасибо!

Отправлено: 16:48, 08-12-2013

 

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


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

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


Вложения
Тип файла: rar list.rar
(7.0 Kb, 5 просмотров)

Вы правы,в этом получается и есть проблема что "час" генерируется однозначным числом, а нужно чтобы всегда было двузначное число.

Отправлено: 20:34, 09-12-2013 | #11



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

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


Ветеран


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

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


Давайте проделаем ещё раз то же самое с таким кодом:
читать дальше »
Код: Выделить весь код
Option Explicit

With WScript.CreateObject("Scripting.FileSystemObject")
	With .CreateTextFile(.BuildPath(.GetParentFolderName(WScript.ScriptFullName), "list.txt"), True)
		.WriteLine SetLocale("ru")
		.WriteLine DateAdd("s", 1, 0)
		
		.WriteLine SetLocale("en-us")
		.WriteLine DateAdd("s", 1, 0)
		.WriteLine GetLocale()
	End With
End With

WScript.Quit 0

Отправлено: 21:30, 09-12-2013 | #12


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


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

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


Вложения
Тип файла: rar list2.rar
(104 байт, 7 просмотров)

Вот...

Отправлено: 21:48, 09-12-2013 | #13


Ветеран


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

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


Мда. Возможно, я настолько привык к тому, что у меня hh:mm:ss, что и не помню, как оно должно быть по умолчанию.

Ладно, давайте будем тупо добавлять впереди «0» и обрезать:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim strSourceFile

Dim lngDayOnSeconds
Dim objRegExp
Dim arrContent
Dim i


If WScript.Arguments.Count = 1 Then
	strSourceFile = WScript.Arguments.Item(0)
	
	With WScript.CreateObject("Scripting.FileSystemObject")
		If .FileExists(strSourceFile) Then
			Randomize Timer
			
			lngDayOnSeconds = 24 * 60 * 60
			
			Set objRegExp = WScript.CreateObject("VBScript.RegExp")
			
			objRegExp.Pattern = "^(\d{2}\|\d{8}\|\d{8})(\d{6})(\|.*)$"
			
			With .OpenTextFile(strSourceFile)
				arrContent = Split(.ReadAll(), vbLf)
				.Close
			End With
			
			For i = LBound(arrContent) To UBound(arrContent)
				If objRegExp.Test(arrContent(i)) Then
					arrContent(i) = objRegExp.Replace(arrContent(i), "$1" & Right("0" & Replace(DateAdd("s", Rnd() * lngDayOnSeconds, 0), ":", ""), 6) & "$3")
				End If
			Next
			
			.CopyFile strSourceFile, .BuildPath(.GetParentFolderName(strSourceFile), .GetBaseName(strSourceFile) & ".bak"), True
			
			With .CreateTextFile(strSourceFile, True)
				.Write Join(arrContent, vbLf)
				.Close
			End With
			
			Set objRegExp = Nothing
		Else
			WScript.Echo "Source file [" & strSourceFile & "] not found."
			WScript.Quit 2
		End If
	End With
Else
	WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " <Source file>"
	WScript.Quit 1
End If

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

Отправлено: 22:02, 09-12-2013 | #14


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


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

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


Всё работает! Огромнейшее Вам спасибо!!!

Отправлено: 22:47, 09-12-2013 | #15


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


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

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


Добрый день! Подскажите, существует возможность настроить этот скрипт так, чтобы он обрабатывал сразу папку с файлами?

Отправлено: 12:26, 18-12-2013 | #16


Ветеран


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

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


Цитата galclerik:
Подскажите, существует возможность настроить этот скрипт так, чтобы он обрабатывал сразу папку с файлами? »
Нет. Надо переписывать:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim strFolder

Dim lngDayOnSeconds
Dim objRegExp
Dim objFile
Dim arrContent
Dim i


If WScript.Arguments.Count = 1 Then
	strFolder = WScript.Arguments.Item(0)
	
	With WScript.CreateObject("Scripting.FileSystemObject")
		If .FolderExists(strFolder) Then
			Randomize Timer
			
			lngDayOnSeconds = 24 * 60 * 60
			
			Set objRegExp = WScript.CreateObject("VBScript.RegExp")
			
			objRegExp.Pattern = "^(\d{2}\|\d{8}\|\d{8})(\d{6})(\|.*)$"
			
			For Each objFile In .GetFolder(strFolder).Files
				If LCase(.GetExtensionName(objFile.Name)) <> "bak" Then
					WScript.Echo objFile.Path
					
					With .OpenTextFile(objFile.Path)
						arrContent = Split(.ReadAll(), vbLf)
						.Close
					End With
					
					For i = LBound(arrContent) To UBound(arrContent)
						If objRegExp.Test(arrContent(i)) Then
							arrContent(i) = objRegExp.Replace(arrContent(i), "$1" & Right("0" & Replace(DateAdd("s", Rnd() * lngDayOnSeconds, 0), ":", ""), 6) & "$3")
						End If
					Next
					
					objFile.Copy .BuildPath(objFile.ParentFolder.Path, .GetBaseName(objFile.Name) & ".bak"), True
					
					With .CreateTextFile(objFile.Path, True)
						.Write Join(arrContent, vbLf)
						.Close
					End With
				End If
			Next
			
			Set objRegExp = Nothing
		Else
			WScript.Echo "Folder [" & strFolder & "] not found."
			WScript.Quit 2
		End If
	End With
Else
	WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " <Folder>"
	WScript.Quit 1
End If

WScript.Quit 0

Файлы резервных копий «*.bak» пропускаются при обработке папки.
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:34, 19-12-2013 | #17


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


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

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


Спасибо!

Отправлено: 11:59, 19-12-2013 | #18



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Поиск, удаление, замена и добавление строк в текстового файле. Что возможно? akrav Скриптовые языки администрирования Windows 8 06-12-2015 13:22
CMD/BAT - Поиск и удаление строк в файле по сложным условиям i7allia Скриптовые языки администрирования Windows 2 30-10-2013 17:06
VBS/WSH/JS - [решено] Поиск строки по маске в txt файле и замена всей строки из InputBox ultrarare Скриптовые языки администрирования Windows 11 03-07-2013 14:37
CMD/BAT - Поиск файлов по маске и их замена другими. lexxstr Скриптовые языки администрирования Windows 0 20-12-2012 22:54
CMD/BAT - Замена и добавление числа в txt файле Tsok Скриптовые языки администрирования Windows 0 17-10-2011 17:22




 
Переход