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

Название темы: Изменение строк в файле
Показать сообщение отдельно

Ветеран


Contributor


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

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


Nikugorsk, Я не проверял код от Iska, уверен, он рабочий.
Вот еще вариант исполнимого vbs-скрипта.
Код: Выделить весь код
InBox = "Z:\Box_In"                 ' Папка с файлами
InExt = "txt"                       ' Расширение файлов для обработки
' --------------------------------

Set WArg = WScript.Arguments
If Not WArg.Count = 0 Then InBox = WArg.Item(0)

Set FSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set InDir = FSO.GetFolder(InBox)
If Err.Number <> 0 Then
    MsgBox "Ошибка при открытии  " + CStr(Err.Number) + vbCrLf + vbCrLf + InBox + vbCrLf + vbCrLf + Err.Description
    WScript.Quit 2
End If

BakBox = InDir + "\" + Replace(Replace(CStr(Now), ":", "-"), "/", ".") + ".bak"
FSO.CreateFolder (BakBox)
If Err.Number <> 0 Then
    MsgBox "Ошибка при создании  " + CStr(Err.Number) + vbCrLf + vbCrLf + BakBox + vbCrLf + vbCrLf + Err.Description
    WScript.Quit 2
End If
On Error GoTo 0

Set AllFiles = InDir.Files

N = 0
For Each iFile In AllFiles       ' Цикл по файлам в папке (как вариант решения)
    If UCase(FSO.GetExtensionName(iFile)) = UCase(InExt) Then
        With FSO.OpenTextFile(iFile, 1, False)
            AllTxt = .ReadAll
            .Close
        End With
        Do
            i1 = InStr(1, AllTxt, """")
            If i1 = 0 Then Exit Do
            i2 = InStr(i1, AllTxt, "_")
            If i2 = 0 Then Exit Do
            i3 = InStr(i2, AllTxt, "#")
            If i3 = 0 Then Exit Do
            i4 = InStr(i3, AllTxt, """")
            If i4 = 0 Then Exit Do
        
            ii = InDir + "\" + iFile.Name
            i = FSO.MoveFile(iFile, BakBox + "\" + CStr(iFile.Name))
        
            With FSO.CreateTextFile(ii, True)
                .Write Mid(AllTxt, 1, i1) + Mid(AllTxt, i2 + 1, i3 - i2 - 1) + Mid(AllTxt, i4)
                .Close
            End With
            N = N + 1
        Loop While False
    End If
Next

If N = 0 Then
    MsgBox "В папке" + vbCrLf + vbCrLf + InDir + vbCrLf + vbCrLf + "файлы для обработки не найдены"
    FSO.DeleteFolder BakBox, True
    WScript.Quit 1
Else
    Msg = "В папке" + vbCrLf + InDir + vbCrLf + "обработано " + CStr(N) + " файлов"
    MsgBox Msg + vbCrLf + vbCrLf + "исходные файлы в папке" + vbCrLf + BakBox
    WScript.Quit 0
End If
Здесь исходные файлы, которые нуждаются в обработке, будут помещены в отдельную папку, что позволяет не смешивать обработанные и исходные файлы.
Папку с исходными файлами можно указать явным образом в тексте скрипта, либо указать в аргументе при вызове, также можно просто перетащить папку на скрипт в Проводнике, при этом явное указание папки в коде скрипта будет проигнорировано.

YuS_2, Помнится, WSH в Win XP уже был, и даже для него что-то дополнительно доустанавливать уже не нужно.

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


Последний раз редактировалось megaloman, 08-06-2018 в 16:46.

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

Отправлено: 16:39, 08-06-2018 | #12

Название темы: Изменение строк в файле