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

Показать сообщение отдельно

Ветеран


Contributor


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

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


BerryMOR,
Если задача Вами сформулирована корректно и мной правильно понята, то вот vbs
Код: Выделить весь код
RegExp = ".*\.htm|.*\.js"
Text = "_temp"
BoxIn = "Z:\Box_In\temp"

'   BoxIn = "temp"              ' Если скрипт забросить в папку где подпапка temp
'   BoxIn = Replace(WScript.ScriptFullName, WScript.ScriptName, "") + BoxIn

Set Mask = CreateObject("VBScript.RegExp")
Mask.Pattern = RegExp
Mask.IgnoreCase = True
Mask.Global = True

j = 0
Call AllFold(BoxIn, Mask, Text, CreateObject("Scripting.FileSystemObject"), j)
MsgBox "Обработано " + CStr(j) + " файлов"

Sub AllFold(inDir, Msk, Txt, FO, j)     ' ---------------------------------------------
With FO
    Set Fold = .GetFolder(inDir)
    Set Files = Fold.Files

    For Each iFile In Files       ' Цикл по файлам в папке
        If Msk.Test(iFile.Name) Then
        If iFile.Size > 0 Then
            Set Fin = .OpenTextFile(iFile, 1, False)
            Tall = Fin.ReadAll
            Fin.Close
            
            Tall = RTrim(Tall)
            If Right(Tall, 2) = vbCrLf Then Tall = Mid(Tall, 1, Len(Tall) - 2)
            
            If InStr(1, Tall, Txt) > 0 Then
            
                Tall = Split(Tall, vbCrLf)
                Set Fout = .OpenTextFile(iFile, 2, True)
            
                For Each SS In Tall
                    If InStr(1, SS, Txt) = 0 Then Fout.WriteLine SS
                Next
            
                Fout.Close
                Set Tall = Nothing
                                                '''''''''''''' MsgBox iFile
                j = j + 1
            End If
        End If
        End If
    Next
    Set F = .GetFolder(inDir)
    Set SubF = F.SubFolders
End With

For Each Folder In SubF
    Call AllFold(Folder, Msk, Txt, FO, j)
Next

End Sub
То же, но удаление строк организовано через Replace,
страшновато, надо аккуратно написать регулярку для поиска
Код: Выделить весь код
RegExp = ".*\.htm|.*\.js"
Text = vbCrLf + ".*?_temp.*?" + vbCrLf
BoxIn = "Z:\Box_In\temp"

'   BoxIn = "temp"              ' Если скрипт забросить в папку где подпапка temp
'   BoxIn = Replace(WScript.ScriptFullName, WScript.ScriptName, "") + BoxIn

Set Mask = CreateObject("VBScript.RegExp")
Mask.Pattern = RegExp
Mask.IgnoreCase = True
Mask.Global = True

Set RegText = CreateObject("VBScript.RegExp")
RegText.Pattern =Text
RegText.IgnoreCase = True
RegText.Global = True

j = 0
Call AllFold(BoxIn, Mask, RegText, CreateObject("Scripting.FileSystemObject"), j)
MsgBox "Обработано " + CStr(j) + " файлов"

Sub AllFold(inDir, Msk, Txt, FO, j)     ' ---------------------------------------------
With FO
    Set Fold = .GetFolder(inDir)
    Set Files = Fold.Files

    For Each iFile In Files       ' Цикл по файлам в папке
        If Msk.Test(iFile.Name) Then
        If iFile.Size > 0 Then
            Set Fin = .OpenTextFile(iFile, 1, False)
            Tall = Fin.ReadAll
            Fin.Close
                
            Tall = vbCrLf + Tall + vbCrLf
            LL1 = Len(Tall)
            Tall = Txt.Replace(Tall, vbCrLf)
            LL2 = Len(Tall)
            If LL1 <> LL2 Then
                Set Fout = .OpenTextFile(iFile, 2, True)
                Fout.Write Mid(Tall, 3, LL2 - 4)
                Fout.Close
                Set Tall = Nothing
                                                '''''''''''''' MsgBox iFile
                j = j + 1
            End If
        End If
        End If
    Next
    Set F = .GetFolder(inDir)
    Set SubF = F.SubFolders
End With

For Each Folder In SubF
    Call AllFold(Folder, Msk, Txt, FO, j)
Next

End Sub

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 19-06-2019 в 19:42.

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

Отправлено: 18:33, 19-06-2019 | #5