Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Замена текста в интервалах

Ответить
Настройки темы
VBS/WSH/JS - [решено] Замена текста в интервалах
ul9 ul9 вне форума

Пользователь


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

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


Изменения
Автор: ul9
Дата: 09-11-2013
Здравствуйте.
Нуждаюсь в вашей помощи.
Нашла такой скрипт.
Код: Выделить весь код
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
'=============================================================================
Он находит точное совпадение из одного файла и меняет на информацию, взятую из другого файла.
Можно его как-нибудь модифицировать, чтобы он искал начало и конец, а всё что в промежутке заменял?

Пример.
HTML код: Выделить весь код
<table> <tr><td class="thead">Панель управления</a></td></tr> <tr><td class="vbmenu_option">Редактировать подпись</a></td></tr> <tr><td class="vbmenu_option">Редактировать профиль</a></td></tr> <tr><td class="vbmenu_option">Настройки форума</a></td></tr> ....................... .......Какой-то html код.......... ....................... <tr><td class="thead">Разное</td></tr> <tr><td class="vbmenu_option">Личные сообщения</a></td></tr> <tr><td class="vbmenu_option">Менеджер подписки</a></td></tr> <tr><td class="vbmenu_option">Профиль</a></td></tr> <tr><td class="vbmenu_option">Пользователи в on-line</a></td></tr> </table>

скрипт берёт начало <tr><td class="vbmenu_option">Настройки форума</a></td></tr>
скрипт берёт конец <tr><td class="thead">Разное</td></tr>
заменяет информацию, которая находится между этими строками.

Помогите пожалуйста.

Отправлено: 01:33, 09-11-2013

 
ul9 ul9 вне форума Автор темы

Пользователь


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

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


Цитата morebeauty:
это же VBS тут нельзя указывать типы переменных »
Точно, как же я забыла об этом
Цитата morebeauty:
Исправьте »
Спасибо, теперь всё заработало!

Только есть небольшие мелочи, которые хотелось бы добавить:
- если совпадение from или to не найдено, то скрипт выдаёт MsgBox с ошибкой, указывая на файл, при этом прекращает дальнейшую работу.

Отправлено: 02:42, 15-11-2013 | #11



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

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


Аватара для morebeauty

Старожил


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

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


Цитата ul9:
- если совпадение from или to не найдено, то скрипт выдаёт MsgBox с ошибкой, указывая на файл, при этом прекращает дальнейшую работу. »
А какое именно сообщение?

Сообщение он должен выводить, если не найден один из файлов. Так задумано. Однако FintTo или FindFrom можно оставить пустыми. при этом сами файлы должны существовать.

Хотя исправь в скрипте вот эту строку

If posFrom > Len(strFindFrom) And posTo > 0 Then

на

If posFrom > Len(strFindFrom) Or posTo > 0 Then

Отправлено: 04:54, 15-11-2013 | #12

ul9 ul9 вне форума Автор темы

Пользователь


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

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


Сейчас он выдаёт такую ошибку, если не найдено совпадение конца поиска (strFindTo)
C:\from_to\from_to.vbs(147, 4) Ошибка выполнения Microsoft vbscript: Недопустимый вызов или аргумент процедуры: 'Mid'

Если не найдено совпадение начала поиска (strFindFrom), то оно просто заменяет от начала документа до конца поиска (strFindTo).
Цитата morebeauty:
Хотя исправь в скрипте вот эту строку
If posFrom > Len(strFindFrom) And posTo > 0 Then
на
If posFrom > Len(strFindFrom) Or posTo > 0 Then »
Вернула обратно.
Цитата morebeauty:
А какое именно сообщение? »
Название файла, в котором не нашёл совпадение и кнопочку "ок". Но при этом предупреждении скрипт становится на пауза, после нажатия "ок" скрипт продолжает замены.

Отправлено: 02:20, 16-11-2013 | #13



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Замена текста в интервалах

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход