thunderbirdop
Goto Top

Script zusammenfassen oder verkleinern?

Gibt es eine Möglichkeit folgendes Skript kürzer zu fassen (ohne Übersichtlichkeit einzubußen)? Und eventuell noch eine Zeile in der die vorherige merged.txt gelöscht wird?


If([int](get-date).DayofWeek -match '[1]'){$date = (Get-Date -date ((get-date).AddDays(-3)) -format dddd)}else{$date = (Get-Date -date ((get-date).AddDays(-1)) -format dddd)}   

gci "D:\****\$date\1600\*.txt" | %{  
    [regex]::Replace((gc $_.Fullname | out-string),'(?sim)(^-{78}[\r\n]*$)(.*?)(^-{78})','$1' + "`t*****`r`n" + '$3')  
    "`r`n"*5  
} | set-content "D:\****\$date\1600\merged.txt"  

Start-Sleep -s 10


gci "D:\****\$date\1600\*.txt" | %{  
    [regex]::Replace((gc $_.Fullname | out-string),'(?sim)(^-{78}[\r\n]*$)(.*?)(^-{78})','$1' + "`t*****`r`n" + '$3')  
    "`r`n"*5  
} | set-content "D:\****\$date\1600\merged.txt"  

Start-Sleep -s 10


gci "D:\****\$date\1600\*.txt" | %{  
    [regex]::Replace((gc $_.Fullname | out-string),'(?sim)(^-{78}[\r\n]*$)(.*?)(^-{78})','$1' + "`t*****`r`n" + '$3')  
    "`r`n"*5  
} | set-content "D:\****\$date\1600\merged.txt"  

Start-Sleep -s 10


gci "D:\****\$date\1600\*.txt" | %{  
    [regex]::Replace((gc $_.Fullname | out-string),'(?sim)(^-{78}[\r\n]*$)(.*?)(^-{78})','$1' + "`t*****`r`n" + '$3')  
    "`r`n"*5  
} | set-content "D:\****\$date\1600\merged.txt"  

Start-Sleep -s 10


gci "D:\****\$date\1600\*.txt" | %{  
    [regex]::Replace((gc $_.Fullname | out-string),'(?sim)(^-{78}[\r\n]*$)(.*?)(^-{78})','$1' + "`t*****`r`n" + '$3')  
    "`r`n"*5  
} | set-content "D:\****\$date\1600\merged.txt"  

Start-Sleep -s 10


gci "D:\****\$date\1600\*.txt" | %{  
    [regex]::Replace((gc $_.Fullname | out-string),'(?sim)(^-{78}[\r\n]*$)(.*?)(^-{78})','$1' + "`t*****`r`n" + '$3')  
    "`r`n"*5  
} | set-content "D:\****\$date\1600\merged.txt"  


Start-Sleep -s 15

get-content "D:\****\$date\1600\merged.txt" | Out-Printer   
get-content "D:\****\$date\1600\merged.txt" | Out-Printer   
get-content "D:\****\$date\1600\merged.txt" | Out-Printer   
get-content "D:\*****\$date\1600\merged.txt" | Out-Printer   
get-content "D:\*****\$date\1600\merged.txt" | Out-Printer   
get-content "D:\*****\$date\1600\merged.txt" | Out-Printer   


Mit freundlichen Grüßen
Thunderbirdop

Content-ID: 293791

Url: https://administrator.de/forum/script-zusammenfassen-oder-verkleinern-293791.html

Ausgedruckt am: 15.04.2025 um 07:04 Uhr

122990
Lösung 122990 21.01.2016 aktualisiert um 14:47:54 Uhr
Goto Top
If([int](get-date).DayofWeek -match '[1]'){$date = (Get-Date -date ((get-date).AddDays(-3)) -format dddd)}else{$date = (Get-Date -date ((get-date).AddDays(-1)) -format dddd)}   

$folder = "D:\****\$date\1600"  
$filter = '*.txt'  
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}   

Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { 
    $name = $Event.SourceEventArgs.Name
    $fullpath = $Event.SourceEventArgs.FullPath
    $timeStamp = $Event.TimeGenerated
    Write-Host "Die Datei '$name' wurde um '$timeStamp' erstellt. Passe Log an und drucke." -f green  
    [regex]::Replace((gc $fullpath | out-string),'(?sim)(^-{78}[\r\n]*$)(.*?)(^-{78})','$1' + "`t*****`r`n" + '$3') + "`r`n"*5 | out-printer  
    remove-item $fullpath -Force
}

write-host "Warte auf neue Logs ..."  
while($true){
    sleep(2)
}
Gruß grexit
ThunderbirdOP
ThunderbirdOP 21.01.2016 um 14:13:03 Uhr
Goto Top
Die "*" ersetzen in meinem Beitrag nur verschiedene Namen. Heißt das wenn ich das Script auf Ordner 1 - 6 anwenden muss, muss ich das komplette Skript 6 mal ausführen und jedesmal die Sternchen bei $folder ersetzen?
122990
Lösung 122990 21.01.2016 aktualisiert um 14:40:51 Uhr
Goto Top
Zitat von @ThunderbirdOP:
Die "*" ersetzen in meinem Beitrag nur verschiedene Namen.
Ach so, weiß hier ja keiner ...
Dann geht das eher so:
If([int](get-date).DayofWeek -match '[1]'){$date = (Get-Date -date ((get-date).AddDays(-3)) -format dddd)}else{$date = (Get-Date -date ((get-date).AddDays(-1)) -format dddd)}   

$pfade = @(
    "D:\Ordner1\$date\1600\*.txt",  
    "D:\Ordner2\$date\1600\*.txt",  
    "D:\Ordner3\$date\1600\*.txt",  
    "D:\Ordner4\$date\1600\*.txt",  
    "D:\Ordner5\$date\1600\*.txt",  
    "D:\Ordner6\$date\1600\*.txt"  
)

$pfade | %{
    gci $_ | %{
        [regex]::Replace((gc $_.Fullname | out-string),'(?sim)(^-{78}[\r\n]*$)(.*?)(^-{78})','$1' + "`t*****`r`n" + '$3')  
        "`r`n"*5  
    } | out-printer
}
Eine extra Datei erstellen ist hier ja eigentlich nicht nötigt, kannst du direkt an den Drucker schicken ...

A Beginner’s Introduction to Windows PowerShell

Und tschüss ...
ThunderbirdOP
ThunderbirdOP 21.01.2016 um 14:47:35 Uhr
Goto Top

Werde ich mir anschauen. Ich bin halt nur ein Anfänger, tut mir ja leid..
124909
124909 21.01.2016 um 15:35:27 Uhr
Goto Top
Ich frage mich immer bei euch cracks, ob ihr das einfach locker easy runterschreibt oder ob ihr auch paar mal kompilieren müsst. Haha
122990
122990 21.01.2016 aktualisiert um 17:22:47 Uhr
Goto Top
Zitat von @124909:
Ich frage mich immer bei euch cracks, ob ihr das einfach locker easy runterschreibt oder ob ihr auch paar mal kompilieren müsst. Haha
Kompilieren bei Powershell ?? Das macht der Interpreter(.NET) on the fly face-wink
Wenn man lange genug damit arbeitet ist das wie eine Muttersprache die man fließend spricht. Da sieht man dann den Code schon bildlich vor sich, hackt das rein und nach max. zwei drei Tests und Schreibfehlerkorrekturen, lüppt dat. Alles eine Frage der Übung wie bei allem.