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-Key: 293791

Url: https://administrator.de/contentid/293791

Printed on: May 6, 2024 at 10:05 o'clock

Mitglied: 122990
Solution 122990 Jan 21, 2016 updated at 13:47:54 (UTC)
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
Member: ThunderbirdOP
ThunderbirdOP Jan 21, 2016 at 13:13:03 (UTC)
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?
Mitglied: 122990
Solution 122990 Jan 21, 2016 updated at 13:40:51 (UTC)
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 ...
Member: ThunderbirdOP
ThunderbirdOP Jan 21, 2016 at 13:47:35 (UTC)
Goto Top

Werde ich mir anschauen. Ich bin halt nur ein Anfänger, tut mir ja leid..
Mitglied: 124909
124909 Jan 21, 2016 at 14:35:27 (UTC)
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
Mitglied: 122990
122990 Jan 21, 2016 updated at 16:22:47 (UTC)
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.