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

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

Ветеран


Contributor


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

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


Цитата v79italya:
Вот этот макрос, сделанный из скрипта, работает не загружая в Excel. Вот, наподобие этого и хотел. »
Там, похоже, обрабатываются все файлы .csv в указанной папке.
Вот мой вариант vbs-скрипта чтобы удалить во всех файлах CSV в указанной папке строки, содержащие null
Код: Выделить весь код
BoxIn0 = "Z:\Box_In"
BoxIn0 = ""

FileIn = "^.*\.csv$"
Repl = "\n.*,null.*"

BoxIn = ""
With WScript.Arguments
    If .Count > 0 Then
        BoxIn = Trim(.Item(0))
        If Right(BoxIn, 1) = "\" Then BoxIn = Mid(BoxIn, 1, Len(BoxIn) - 1)
    Else
        Set objShell = CreateObject("Shell.Application")
        Set objBoxIn = objShell.BrowseForFolder(0, "Выбирайте папку для обработки CSV-файлов", 1, BoxIn0)

        If objBoxIn Is Nothing Then
            MsgBox "Папка не выбрана, скрипт завершаем"
            WScript.Quit 2
        End If

        BoxIn = objBoxIn.Self.Path
    End If
End With

With CreateObject("Scripting.FileSystemObject")
    On Error Resume Next
        Set Folds = .GetFolder(BoxIn)
        If Err.Number <> 0 Then
            MsgBox "Ошибка при открытии папки" + vbCrLf + BoxIn + vbCrLf + vbCrLf + Err.Description
            WScript.Quit 2
        End If
    On Error GoTo 0
    
    Set RegMaska = CreateObject("VBScript.RegExp")
    RegMaska.Pattern = FileIn
    RegMaska.IgnoreCase = True
    
    Set RegRepl = CreateObject("VBScript.RegExp")
    RegRepl.Pattern = Repl
    RegRepl.IgnoreCase = True
    RegRepl.Global = True
    
    Set Files = Folds.Files
    
    For Each jf In Files
        If RegMaska.Test(jf) Then
'            MsgBox jf
            On Error Resume Next
            Err.Number = 0
            Set fIn = .OpenTextFile(jf, 1, False)
            
            If Err.Number <> 0 Then
                MsgBox "Ошибка при открытии файла" + vbCrLf + .GetAbsolutePathName(jf) + vbCrLf + vbCrLf + Err.Description
                On Error GoTo 0
'                WScript.Quit 2
            Else
                Alls = ""
                Alls = fIn.ReadAll
                fIn.Close
                On Error GoTo 0
                If RegRepl.Test(Alls) Then
                    jfNew = jf.Path
                    If .FileExists(jf + ".bak") Then .DeleteFile jf + ".bak", True
                    .MoveFile jf, jf + ".bak"       ' ==== Создание страх копии
                    
                    With .CreateTextFile(jfNew, True)
                        .Write (RegRepl.Replace(Alls, ""))
                        .Close
                    End With
                End If
            End If
        End If
    Next

End With
Можете просто перетащить обрабатываемую папку из Проводника на скрипт или на иконку, созданную для скрипта на рабочем столе. Ухватите её мышкой, перетащите на скрипт и отпустите.
Можете вызвать скрипт из командной строки, указав в аргументе скрипта в кавычках путь к папке.
Можете простр вызвать скрипт, откроется интерфейс для открытия нужной папки.
Я предусмотрел для изменяемых файлов создание страховой копии с расширением .bak

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


Последний раз редактировалось megaloman, 26-03-2020 в 08:01.

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

Отправлено: 18:03, 25-03-2020 | #30