![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 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 | Цитировать Цитата morebeauty:
![]() Цитата morebeauty:
Только есть небольшие мелочи, которые хотелось бы добавить: - если совпадение from или to не найдено, то скрипт выдаёт MsgBox с ошибкой, указывая на файл, при этом прекращает дальнейшую работу. |
||
Отправлено: 02:42, 15-11-2013 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать Цитата ul9:
Сообщение он должен выводить, если не найден один из файлов. Так задумано. Однако FintTo или FindFrom можно оставить пустыми. при этом сами файлы должны существовать. Хотя исправь в скрипте вот эту строку If posFrom > Len(strFindFrom) And posTo > 0 Then на If posFrom > Len(strFindFrom) Or posTo > 0 Then |
|
Отправлено: 04:54, 15-11-2013 | #12 |
Пользователь Сообщения: 122
|
Профиль | Отправить PM | Цитировать Сейчас он выдаёт такую ошибку, если не найдено совпадение конца поиска (strFindTo)
C:\from_to\from_to.vbs(147, 4) Ошибка выполнения Microsoft vbscript: Недопустимый вызов или аргумент процедуры: 'Mid' Если не найдено совпадение начала поиска (strFindFrom), то оно просто заменяет от начала документа до конца поиска (strFindTo). Цитата morebeauty:
Цитата morebeauty:
|
||
Отправлено: 02:20, 16-11-2013 | #13 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|