![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Замена текста в интервалах |
|
|
VBS/WSH/JS - [решено] Замена текста в интервалах
|
Пользователь Сообщения: 122 |
Здравствуйте.
Нуждаюсь в вашей помощи. Нашла такой скрипт. Option Explicit Const ForReading = 1 Const ForWriting = 2 Dim objArgs Dim objFSO Dim objFile Dim strWhatFind Dim strReplaceBy Dim strContent Set objArgs = WScript.Arguments.Named If objArgs.Count = 4 Then Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If objArgs.Exists("FolderForScan") Then If objArgs.Exists("FileExtension") Then If objArgs.Exists("FileWhatFind") Then If objArgs.Exists("FileReplaceBy") Then If objFSO.FolderExists(objArgs.Item("FolderForScan")) Then If objFSO.FileExists(objArgs.Item("FileWhatFind")) Then If objFSO.FileExists(objArgs.Item("FileReplaceBy")) Then If objFSO.GetFile(objArgs.Item("FileWhatFind")).Size > 0 Then With objFSO.OpenTextFile(objArgs.Item("FileWhatFind"), ForReading) strWhatFind = .ReadAll() .Close End With If objFSO.GetFile(objArgs.Item("FileReplaceBy")).Size > 0 Then With objFSO.OpenTextFile(objArgs.Item("FileReplaceBy"), ForReading) strReplaceBy = .ReadAll() .Close End With Else strReplaceBy = "" End If WScript.Echo "Folder for scan: " & objArgs.Item("FolderForScan") WScript.Echo "File extension: " & objArgs.Item("FileExtension") WScript.Echo "File what find: " & objArgs.Item("FileWhatFind") WScript.Echo "File replace by: " & objArgs.Item("FileReplaceBy") WScript.Echo ScanSubFolders objFSO.GetFolder(objArgs.Item("FolderForScan")) Else WScript.Echo "File [" & objArgs.Item("FileWhatFind") & "] is zero length" End If Else WScript.Echo "File [" & objArgs.Item("FileWhatFind") & "] not found" End If Else WScript.Echo "File [" & objArgs.Item("FileWhatFind") & "] not found" End If Else WScript.Echo "Folder [" & objArgs.Item("FolderForScan") & "] not found" End If Else WScript.Echo "Not found argument <FileReplaceBy>" Call Usage End If Else WScript.Echo "Not found argument <FileWhatFind>" Call Usage End If Else WScript.Echo "Not found argument <FileExtension>" Call Usage End If Else WScript.Echo "Not found argument <FolderForScan>" Call Usage End If Set objFSO = Nothing Else Call Usage End If Set objArgs = Nothing WScript.Quit '============================================================================= '============================================================================= Sub ScanSubFolders(objFolder) Dim objSubFolder Dim objFile WScript.Echo "[" & objFolder.Path & "]" For Each objFile In objFolder.Files If UCase(objFSO.GetExtensionName(objFile.Name)) = UCase(objArgs.Item("FileExtension")) Then WScript.Echo " " & objFile.Name If objFile.Size > 0 Then With objFSO.OpenTextFile(objFile.Path, ForReading) strContent = .ReadAll() .Close End With If InStr(1, strContent, strWhatFind, vbTextCompare) > 0 Then WScript.Echo " Fragment for replace found" With objFSO.OpenTextFile(objFile.Path, ForWriting) .Write Replace(strContent, strWhatFind, strReplaceBy) .Close End With End If End If End If Next WScript.Echo For Each objSubFolder In objFolder.SubFolders ScanSubFolders objSubFolder Next End Sub '============================================================================= '============================================================================= Sub Usage() WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " " & _ "/FolderForScan:<folder> " & _ "/FileExtension:<extension> " & _ "/FileWhatFind:<file> " & _ "/FileReplaceBy:<file>" End Sub '============================================================================= Можно его как-нибудь модифицировать, чтобы он искал начало и конец, а всё что в промежутке заменял? Пример.
скрипт берёт начало <tr><td class="vbmenu_option">Настройки форума</a></td></tr> скрипт берёт конец <tr><td class="thead">Разное</td></tr> заменяет информацию, которая находится между этими строками. Помогите пожалуйста. |
|
Отправлено: 01:33, 09-11-2013 |
Пользователь Сообщения: 122
|
Профиль | Отправить PM | Цитировать Не тот уже oszone... Не хотят помогать
![]() |
Отправлено: 22:22, 09-11-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1759
|
|
Последний раз редактировалось Foreigner, 10-11-2013 в 09:54. Отправлено: 09:48, 10-11-2013 | #3 |
Пользователь Сообщения: 122
|
Профиль | Отправить PM | Цитировать Здесь задаётся в коде условие.
А можно, чтобы условия поиска он брал из txt файла. Т.к. замен будет много, а мне нужен универсальный скрипт, которому я буду подсовывать только условия поиска. |
Отправлено: 18:00, 10-11-2013 | #4 |
![]() Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать Цитата ul9:
|
||
Отправлено: 11:00, 12-11-2013 | #5 |
Пользователь Сообщения: 122
|
Профиль | Отправить PM | Цитировать Цитата morebeauty:
|
|
Отправлено: 21:21, 12-11-2013 | #6 |
![]() Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать Понятно. Исправил предложенный тобой скрипт.
Не тестировал, поэтому первый запуск советую произвести на тестовой папке с копиями реальных файлов. В теории все должно работать ![]() Если чего то работать не будет или будет работать не так, опиши подробно что не так. Перед использованием читай описание внизу сообщения. Option Explicit Const ForReading = 1 Const ForWriting = 2 Dim objArgs Dim objFSO Dim objFile Dim strWhatFind Dim strReplaceBy Dim strFindFrom Dim strFindTo Dim strContent Set objArgs = WScript.Arguments.Named If objArgs.Count = 5 Then Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If objArgs.Exists("FolderForScan") Then If objArgs.Exists("FileExtension") Then If objArgs.Exists("FileReplaceBy") Then If objArgs.Exists("FileFindFrom") Then If objArgs.Exists("FileFindTo") Then If objFSO.FolderExists(objArgs.Item("FolderForScan")) Then If objFSO.FileExists(objArgs.Item("FileFindFrom")) Then If objFSO.FileExists(objArgs.Item("FileFindTo")) Then If objFSO.FileExists(objArgs.Item("FileReplaceBy")) Then If objFSO.GetFile(objArgs.Item("FileFindFrom")).Size > 0 Then With objFSO.OpenTextFile(objArgs.Item("FileFindFrom"), ForReading) strFindFrom = .ReadAll() .Close End With Else strFindFrom = "" End If If objFSO.GetFile(objArgs.Item("FileFindTo")).Size > 0 Then With objFSO.OpenTextFile(objArgs.Item("FileFindTo"), ForReading) strFindTo = .ReadAll() .Close End With Else strFindTo = "" End If If objFSO.GetFile(objArgs.Item("FileReplaceBy")).Size > 0 Then With objFSO.OpenTextFile(objArgs.Item("FileReplaceBy"), ForReading) strReplaceBy = .ReadAll() .Close End With Else strReplaceBy = "" End If WScript.Echo "Folder for scan: " & objArgs.Item("FolderForScan") WScript.Echo "File extension: " & objArgs.Item("FileExtension") WScript.Echo "File find from: " & objArgs.Item("FileFindFrom") WScript.Echo "File find to: " & objArgs.Item("FileFindto") WScript.Echo "File replace by: " & objArgs.Item("FileReplaceBy") WScript.Echo ScanSubFolders objFSO.GetFolder(objArgs.Item("FolderForScan")) Else WScript.Echo "File [" & objArgs.Item("FileReplaceBy") & "] not found" End If Else WScript.Echo "File [" & objArgs.Item("FileFindTo") & "] not found" End If Else WScript.Echo "File [" & objArgs.Item("FileFindFrom") & "] not found" End If Else WScript.Echo "Folder [" & objArgs.Item("FolderForScan") & "] not found" End If Else WScript.Echo "Not found argument <FileFindTo>" Call Usage End If Else WScript.Echo "Not found argument <FileFindFrom>" Call Usage End If Else WScript.Echo "Not found argument <FileReplaceBy>" Call Usage End If Else WScript.Echo "Not found argument <FileExtension>" Call Usage End If Else WScript.Echo "Not found argument <FolderForScan>" Call Usage End If Set objFSO = Nothing Else Call Usage End If Set objArgs = Nothing WScript.Quit '============================================================================= '============================================================================= Sub ScanSubFolders(objFolder) Dim objSubFolder Dim objFile WScript.Echo "[" & objFolder.Path & "]" For Each objFile In objFolder.Files If UCase(objFSO.GetExtensionName(objFile.Name)) = UCase(objArgs.Item("FileExtension")) Then WScript.Echo " " & objFile.Name If objFile.Size > 0 Then With objFSO.OpenTextFile(objFile.Path, ForReading) strContent = .ReadAll() .Close End With Dim posFrom As Currency Dim posTo As Currency If strFindFrom > "" And strFindTo > "" Then posFrom = InStr(1, strContent, strFindFrom, vbTextCompare) + Len(strFindFrom) posTo = InStr(1, strContent, strFindTo, vbTextCompare) Else If strFindFrom > "" And strFindTo = "" Then posFrom = InStr(1, strContent, strFindFrom, vbTextCompare) + Len(strFindFrom) posTo = Len(strContent) End If If strFindFrom = "" And strFindTo > "" Then posFrom = 1 posTo = InStr(1, strContent, strFindTo, vbTextCompare) End if If strFindFrom = "" And strFindTo = "" Then posFrom = 0 posTo = 0 End if End If If posFrom > Len(strFindFrom) And posTo > 0 Then strWhatFind = Mid(strContent, posFrom, posTo - posFrom) Else strWhatFind = "" End If If InStr(1, strContent, strWhatFind, vbTextCompare) > 0 Then WScript.Echo " Fragment for replace found" With objFSO.OpenTextFile(objFile.Path, ForWriting) .Write Replace(strContent, strWhatFind, strReplaceBy) .Close End With End If End If End If Next WScript.Echo For Each objSubFolder In objFolder.SubFolders ScanSubFolders objSubFolder Next End Sub '============================================================================= '============================================================================= Sub Usage() WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " " & _ "/FolderForScan:<folder> " & _ "/FileExtension:<extension> " & _ "/FileWhatFind:<file> " & _ "/FileReplaceBy:<file>" End Sub Теперь скрипт нужно запускать не с 4 параметрами, а с 5.
Соответственно файлов с информацией теперь будет 3:
Условия выполнения замены (важно): Если в файле начальной строки и в файле конечной строки есть информация и она найдена в тексте, то будет произведена обычная заменя ОТ -- ДО Если в файле начальной строки ничего нет, а в файле конечной строки есть информация и она найдена, то будет произведена замена с самого начала файла до конечной строки Если в файле начальной строки есть информация и она найдена, а в файле конечной строки ничего нет, то будет произведена замена от начальной строки до конца файла |
Последний раз редактировалось morebeauty, 13-11-2013 в 07:25. Отправлено: 05:20, 13-11-2013 | #7 |
Пользователь Сообщения: 122
|
Профиль | Отправить PM | Цитировать |
Отправлено: 18:23, 13-11-2013 | #8 |
Пользователь Сообщения: 122
|
Профиль | Отправить PM | Цитировать Запустила вот так
cscript.exe //nologo from_to.vbs /FolderForScan:"C:\from_to" /FileExtension:"html" /FileReplaceBy:"text\FileReplaceBy.txt" /FileFindFrom:"text\FileFindFrom.txt" /FileFindTo:"text\FileFindTo.txt" C:\from_to\from_to.vbs(127, 29) Ошибка компиляции Microsoft vbscript: Предполагается наличие окончания инструкции |
Отправлено: 22:12, 13-11-2013 | #9 |
![]() Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать Все правильно, это же VBS тут нельзя указывать типы переменных
![]() Исправьте Dim posFrom As Currency Dim posTo As Currency на Dim posFrom Dim posTo в скрипте и попробуйте еще |
Отправлено: 07:14, 14-11-2013 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Замена текста в txt | Starter1 | Скриптовые языки администрирования Windows | 17 | 04-08-2022 18:26 | |
CMD/BAT - Замена текста | Fevzy | Скриптовые языки администрирования Windows | 9 | 28-04-2013 21:22 | |
Любой язык - Поиск и замена текста | firstarey | Скриптовые языки администрирования Windows | 2 | 09-04-2013 08:44 | |
C/C++ - [решено] Поиск и замена текста | Simpler | Программирование и базы данных | 15 | 01-12-2010 16:03 | |
Офис и Текст - Замена текста | Котяра | Программное обеспечение Windows | 1 | 29-09-2008 13:51 |
|