|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск замена текста |
|
CMD/BAT - [решено] Поиск замена текста
|
Новый участник Сообщения: 24 |
гм неполистал форум прошу прощения на следующей страницы похожая тема. если не выйдет. отпишу нижу
|
|
Отправлено: 01:39, 25-03-2012 |
![]() Пользователь Сообщения: 100
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Цитата megaloman:
|
||
Отправлено: 15:22, 19-07-2019 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата UncleD:
У Вас: vbs-скрипт скрывает батник, который вызывает VBS-скрипт. Тихо шифером шурша .... Посмотрите предыдущий пост, я немного изменил скрипт. А еще нормальнее, разобраться с формированием файла, чтобы его не корректировать. |
|
------- Последний раз редактировалось megaloman, 19-07-2019 в 15:35. Отправлено: 15:27, 19-07-2019 | #22 |
Ветеран Сообщения: 900
|
Профиль | Отправить PM | Цитировать megaloman, здравствуйте
Пожалуйста, помогите ДОработать Ваш отличный скрипт http://forum.oszone.net/post-2880574-20.html FileIn = "Z:\Где файл\11.txt" Fin = "ПоказательТипа=0" Rep = "ПоказательТипа=" Set FSO = CreateObject("Scripting.FileSystemObject") Set FF = FSO.OpenTextFile(FileIn, 1) InTxt = FF.ReadAll FF.Close If InStr(1, InTxt, Fin) <> 0 Then Set FF = FSO.OpenTextFile(FileIn, 2, True) FF.Write Replace(InTxt, Fin, Rep) FF.Close End If На входе, лично в моем случае, может быть ПоказательТипа=0 ПоказательТипа=1 ПоказательТипа=3 ПоказательТипа=4 ПоказательТипа=5 ... то есть после равно может быть любая цифра, хоть 0, хоть 987654321 Как сделать по умному, чтобы на выходе было ПоказательТипа=2 Момент №2 В файле FileIn = "Z:\Где файл\11.txt" параметр ПоказательТипа=2 может быть в двух местах ... [messageWindow] geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x3\xab\0\0\0\x9e\0\0\x5\xdd\0\0\x3I\0\0\x3\xb3\0\0\0\xbc\0\0\x5\xd5\0\0\x3\x41\0\0\0\0\0\0\0\0\a\x80\0\0\x3\xb3\0\0\0\xbc\0\0\x5\xd5\0\0\x3\x41) ПоказательТипа=0 wordWarp=true ... [mediaInfo] geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x1\x31\0\0\0w\0\0\x2\xc8\0\0\x2\x9f\0\0\x1\x35\0\0\0\x8e\0\0\x2\xc4\0\0\x2\x9b\0\0\0\0\0\0\0\0\x5\0\0\0\x1\x35\0\0\0\x8e\0\0\x2\xc4\0\0\x2\x9b) ПоказательТипа=1 aceSplitterSettings=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0\xcd\0\0\x1*\x1\xff\xff\xff\xff\x1\0\0\0\x2\0) showTimestamp=true А секцию [messageWindow] НЕ трогать |
Отправлено: 15:22, 09-08-2023 | #23 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать FileIn = "Z:\Где файл\1c_to_kl.txt" Section = Array("mediaInfo") Fin = "ПоказательТипа=\d* *" Rep = "ПоказательТипа=2" Set R = CreateObject("VBScript.RegExp") With R .Global = True .Pattern = Fin .IgnoreCase = True End With With CreateObject("Scripting.FileSystemObject") With .OpenTextFile(FileIn, 1) InTxt = Split(.ReadAll, "[") .Close End With For i = 0 To UBound(InTxt) For Each s In Section If InStr(1, InTxt(i), s + "]", 1) = 1 Then InTxt(i) = R.Replace(InTxt(i), Rep) Exit For End If Next Next With .OpenTextFile(FileIn, 2, True) .Write Join(InTxt, "[") .Close End With End With |
------- Отправлено: 17:47, 09-08-2023 | #24 |
Ветеран Сообщения: 900
|
Профиль | Отправить PM | Цитировать megaloman
Здравствуйте Отлично, класс.. Но возникла бяка - каждый раз при запуске скрипта файл сохраняется заново, даже если в секции [mediaInfo], ПоказательТипа=2 Можете, пожалуйста, сделать как здесь http://forum.oszone.net/post-2880574-20.html Вот доработка vbs-скрипта c целью исключения перезаписи входного файла в случае, если строка для замены не найдена (то есть, на практике, ранее эта замена уже планировщиком была сделана) Если по проще: если в файле, в секции [mediaInfo], ПоказательТипа=2 - то ничего НЕ делать, не сохранять файл, просто закрыть файл если в файле, в секции [mediaInfo], ПоказательТипа= НЕ РАВНО 2 - то делать замену и сохранять файл |
Последний раз редактировалось SharkyEXE, 09-08-2023 в 21:34. Отправлено: 21:11, 09-08-2023 | #25 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать FileIn = "Z:\Где файл\1c_to_kl.txt" Section = Array("mediaInfo") Fin = "ПоказательТипа=\d*" Rep = "ПоказательТипа=2" Set R = CreateObject("VBScript.RegExp") With R .Global = True .Pattern = Fin .IgnoreCase = True End With With CreateObject("Scripting.FileSystemObject") With .OpenTextFile(FileIn, 1) InTxt = Split(.ReadAll, "[") .Close End With L = False For i = 0 To UBound(InTxt) For Each s In Section If InStr(1, InTxt(i), s + "]", 1) = 1 Then InTxt0 = InTxt(i) InTxt(i) = R.Replace(InTxt(i), Rep) L = L Or InTxt0 <> InTxt(i) Exit For End If Next Next If L Then With .OpenTextFile(FileIn, 2, True) .Write Join(InTxt, "[") .Close End With MsgBox FileIn + vbCr + "был изменен" End If End With |
------- Отправлено: 21:48, 09-08-2023 | #26 |
Ветеран Сообщения: 900
|
Профиль | Отправить PM | Цитировать megaloman
Здравствуйте 1) Класс, отлично Теперь запустил один раз Ваш скрипт - в файле, в секции [mediaInfo], было ПоказательТипа=0, стало ПоказательТипа=2 Появилась табличка "был изменен" Потом сколько раз я НЕ запускал Ваш скрипт - файл НЕ записывался и НЕ сохранялся заново Мини пожелание - а нельзя добавить табличку "НЕ был изменен"? Типа, потом, сколько раз я не буду запускать Ваш скрипт - я каждый раз буду видеть табличку "НЕ был изменен" 2) Цитата: Я неточно представляю задачу, поэтому предполагаю, что секций, где надо менять данные, несколько (имена задаются в массиве Section), а также в каждой секции ПоказательТипа может встречаться не один раз. Приношу Вам мои извинения, пусть будет так, для меня работает и работает А так, повторюсь: есть файл, в файле 52 секции ... [messageWindow] geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x3\xab\0\0\0\x9e\0\0\x5\xdd\0\0\x3I\0\0\x3\xb3\0\0\0\xbc\0\0\x5\xd5\0\0\x3\x41\0\0\0\0\0\0\0\0\a\x80\0\0\x3\xb3\0\0\0\xbc\0\0\x5\xd5\0\0\x3\x41) ПоказательТипа=0 wordWarp=true ... [mediaInfo] geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x1\x31\0\0\0w\0\0\x2\xc8\0\0\x2\x9f\0\0\x1\x35\0\0\0\x8e\0\0\x2\xc4\0\0\x2\x9b\0\0\0\0\0\0\0\0\x5\0\0\0\x1\x35\0\0\0\x8e\0\0\x2\xc4\0\0\x2\x9b) ПоказательТипа=1 aceSplitterSettings=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0\xcd\0\0\x1*\x1\xff\xff\xff\xff\x1\0\0\0\x2\0) showTimestamp=true ... может быть только 1) 1на строка в секции [messageWindow] 2) 1на строка в секции [mediaInfo] Больше в файле в остальных 50 секциях параметра нигде нету |
Последний раз редактировалось SharkyEXE, 09-08-2023 в 22:06. Отправлено: 21:56, 09-08-2023 | #27 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Msgbox я оставил случайно, для отладки. для планировщика это не годится. Как вариант
FileIn = "Z:\Где файл\1c_to_kl.txt" Section = Array("mediaInfo") Fin = "ПоказательТипа=\d*" Rep = "ПоказательТипа=2" Set R = CreateObject("VBScript.RegExp") With R .Global = True .Pattern = Fin .IgnoreCase = True End With With CreateObject("Scripting.FileSystemObject") With .OpenTextFile(FileIn, 1) InTxt = Split(.ReadAll, "[") .Close End With L = False For i = 0 To UBound(InTxt) For Each s In Section If InStr(1, InTxt(i), s + "]", 1) = 1 Then InTxt0 = InTxt(i) InTxt(i) = R.Replace(InTxt(i), Rep) L = L Or InTxt0 <> InTxt(i) Exit For End If Next Next Out = FileIn + vbCr + "не изменялся" If L Then With .OpenTextFile(FileIn, 2, True) .Write Join(InTxt, "[") .Close End With Out = FileIn + vbCr + "был изменен" End If ''''''''MsgBox Out CreateObject("WScript.Shell").Run "Msg.exe" + " * " + CStr(Now()) + vbCr + Out, 0, False End With |
------- Отправлено: 22:52, 09-08-2023 | #28 |
Ветеран Сообщения: 900
|
Профиль | Отправить PM | Цитировать megaloman
Здравствуйте Пожалуйста, будьте так, любезны, научите, а как увидеть выхлоп Вашего скрипта? Мол, когда изменился - увидеть строку, окно "был изменен" Мол, когда изменений нет - увидеть строку, окно "не изменялся" Банальный запуск vbs скрипта - ничего не появляется, ни "был изменен", ни "не изменялся" |
Отправлено: 23:15, 09-08-2023 | #29 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать SharkyEXE, У меня работает. Но я запускаю скрипт без планировщика от своего имени. Возможно, сто лет тому назад я делал какие-то настройки.
Попробуйте почитать.. Попробуйте вместо " * " написать " имяпользователя " имяпользователя можно увидеть, запустив в командном окне Echo %Username% |
------- Последний раз редактировалось megaloman, 09-08-2023 в 23:43. Отправлено: 23:37, 09-08-2023 | #30 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Поиск и замена текста | ajakzs | Скриптовые языки администрирования Windows | 18 | 08-08-2013 16:10 | |
CMD/BAT - Поиск и замена текста через bat | Lilless | Скриптовые языки администрирования Windows | 0 | 28-02-2012 02:08 | |
CMD/BAT - [решено] Поиск, остановка процесса, поиск и замена файла на разных дисках | Gawr33 | Скриптовые языки администрирования Windows | 11 | 23-04-2011 23:09 | |
[решено] Поиск и замена текста в файле | TERMINAL | AutoIt | 6 | 16-03-2011 17:49 | |
C/C++ - [решено] Поиск и замена текста | Simpler | Программирование и базы данных | 15 | 01-12-2010 16:03 |
|