Ветеран
Сообщения: 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
|