Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Убрать пробелы в конце каждой строки если они есть (http://forum.oszone.net/showthread.php?t=349963)

Alexander_88 06-11-2021 09:58 2970922

Убрать пробелы в конце каждой строки если они есть
 
Здравствуйте … Подскажите, как убрать пробелы в конце каждой строки, если они есть? Можно было конечно через notepad++ это сделать, но txt файлов слишком много.

DJ Mogarych 06-11-2021 10:16 2970923

Powershell
Код:

dir "C:\temp\123\*.txt" -recurse |% {(gc $_) -replace "\s+$" |Set-Content $_}

Elven 06-11-2021 10:47 2970932

на cmd это геморно делать, а на поше сразу есть TrimEnd
Код:

$files = Get-ChildItem -Path ./ -Filter *.txt

ForEach($file in $files) {
    Get-Content $file | ForEach-Object {$_.TrimEnd()} | Set-Content $file
}


Alexander_88 06-11-2021 11:19 2970944

DJ Mogarych, Elven, спасибо за ответы, Всё работает :)

megaloman 06-11-2021 17:24 2970989

Alexander_88,
Цитата:

Цитата Elven
cmd это геморно делать »

И результат можем получить кривой.
Вот .vbs
Я ставил немного более общую задачу.
Можно указать конкретный файл для обработки, можно указать папку, при этом файлы в папке обработаются по маске. Можно создать иконку на этот скрипт на столе и в проводнике затягивать на нее группу файлов, папок, или их смесь для обработки.
Код:

FileFolderIn = "Z:\Box_In\файл с пробелами в конце строки.txt"        'Будет обрабатываться этот файл или папка если в аргументах не будет иного.
''''''''''''FileFolderIn = "Z:\Box_In"                                        'Будет обрабатываться этот файл или папка если в аргументах не будет иного.
Mask = "^.*\.txt$"                                                  'Если в обработке будет папка, будут обрабатываться файлы по маске

Set FSO = CreateObject("Scripting.FileSystemObject")

With WScript.Arguments
    If .Count > 0 Then
        For iItem = 0 To .Count - 1
            If FSO.FolderExists(.Item(iItem)) Then
                Call ViewFolder(FSO, .Item(iItem), Mask)
            Else
                e = RTrimFile(FSO, .Item(iItem))
            End If
        Next
    Else
            If FSO.FolderExists(FileFolderIn) Then
                Call ViewFolder(FSO, FileFolderIn, Mask)
            Else
                e = RTrimFile(FSO, FileFolderIn)
            End If
    End If
End With

'''''''''''''''End Sub
Sub ViewFolder(FSO, FolName, Mask)
    Set Fld = FSO.GetFolder(FolName)
    With CreateObject("VBScript.RegExp")
        .IgnoreCase = True
        .Global = True
        .Pattern = Mask

        For Each FName In Fld.Files
            If .Test(FName) Then
                e = RTrimFile(FSO, FName)
            End If
        Next
    End With
End Sub

Function RTrimFile(FSO, FName)
    RTrimFile = 0
    With FSO
        If Not .FileExists(FName) Then
            MsgBox "File: " + vbCrLf + FName + vbCrLf + "not exists", 48, "File not exists"
            RTrimFile = 1
            Exit Function
        End If
        With .OpenTextFile(FName, 1)
            On Error Resume Next
            AllTxt = .ReadAll
            If Err.Number <> 0 Then
                MsgBox "File: " + vbCrLf + FName + vbCrLf + Err.Description, 48, "Error Reading File"
                RTrimFile = 2
                .Close
                On Error GoTo 0
                Exit Function
            End If
            .Close
            AllTxt = Split(AllTxt, vbCrLf)
            N1 = LBound(AllTxt)
            N2 = UBound(AllTxt)
           
            NN = N1 - 1
            For i = N1 To N2
                AllTxt(i) = RTrim(AllTxt(i))
                If Len(AllTxt(i)) <> 0 Then NN = i
            Next
        End With
       
        With .OpenTextFile(FName, 2)
            For i = N1 To NN
                .WriteLine AllTxt(i)
            Next
            .Close
        End With
   
    End With
    RTrimFile = 0
End Function



Время: 01:41.

Время: 01:41.
© OSzone.net 2001-