nxtrex
Goto Top

TXT Datei verschieben wenn Datum drinnen steht

Hallo,

ich benötige Hilfe bei der Programmierung mit Powershell.

Folgende Ausgangssituation in einen Ordner kommen 6 Text Dateien an 3 davon haben kein Datum und die anderen 3 haben ein tagesaktuelles Datum in der ersten Zeile.
Die Text Dateien mit dem Datum in der ersten Zeile sollen in einen anderen Ordner verschoben werden. Die Textdateien ohne Datum in der ersten Zeile sollen gelöscht werden.


Folgendes auslese Script haben wir bereits:

$file = Get-Content "C:\Dateien\*.txt"  
$containsWord = $file | %{$_ -match "15.01.2021"}  
if ($containsWord -contains $true) {
    Write-Host "Datum ist in erster Zeile"  
    
} else {
    Write-Host "Datum ist nicht drinnen"  
   
}


Jedoch haben wir die Problematik dass wir momentan nicht wissen wie wir dem Script sagen dass genau die Text Datei verschoben werden soll in der das Datum steht und genau die Textdatei gelöscht werden soll in der kein Datum steht.

Content-Key: 640956

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

Ausgedruckt am: 28.03.2024 um 09:03 Uhr

Mitglied: Doskias
Doskias 15.01.2021 aktualisiert um 11:41:44 Uhr
Goto Top
Moin,

ich würde mit einem get-childitem den ganzen Ordner abfragen und dann mit einer forech-Schleife den Inhalt auswerten und dann in einer if-Bedingung via move-item und remove-item die entsprechende Operation vornehmen.

Also etwa so:
$Dateien=get-childitem c:\temp\test
foreach($Datei in $Dateien)
{
    $file = Get-Content c:\temp\test\$Datei
    $containsWord = $file | %{$_ -match "15.01.2021"}  
    if ($containsWord -contains $true) 
         {Move-Item c:\temp\test\$Datei 'C:\temp\test 2'}  
    else 
       {remove-item c:\temp\test\$Datei} 
}

Beachte aber: mit Contains prüfst du nicht nur die erste Zeile, sondern die ganze Datei.
Mitglied: TK1987
TK1987 15.01.2021 aktualisiert um 11:47:24 Uhr
Goto Top
Moin,

ich würde das so machen:
$Files = Get-ChildItem "C:\Dateien\*.txt" | Where-object {($_ |Select-String -pattern '^\d{2}\.\d{2}\.\d{4}')}  
In $Files landen dann überhaupt nur noch die Dateien, in denen ein Datum an einem Zeilenanfang steht.

Gruß Thomas
Mitglied: Nxtrex
Nxtrex 15.01.2021 aktualisiert um 11:50:48 Uhr
Goto Top
Klasse, dass ist genau dass was ich brauche und es funktioniert hervorragend face-smile musste nur das remove und move vertauschen weil die Dateien mit dem Datum ja da bleiben müssen :D .

Ich bedanke mich vielmals bei euch für die hilfe.


Noch eine kleine Frage kann ich statt dem festen Datum auch ein tagesaktuelles Datum holen also abfragen wie bspw %date% ? Also damit man das Datum nicht immer Ändern muss im Script. Oder könnte man sogar abfragen wenn ein Format xx.xx.xxxx ist dass die Dateien dann auch verschoben werden?
Mitglied: Fennek11
Fennek11 15.01.2021 um 11:50:22 Uhr
Goto Top
Der Code sucht das aktuelle Datum in der ersten Zeile:

$file = 'C:\Users\[User]\Desktop\Test.txt'  
$zt = get-date
$Dt = '{0:dd\.M\.yyyy}' -f $zt.AddMonths(0)  

$ct = get-content $file

if ($ct | Select-String $Dt) {'Treffer'}  
else {'Fehler'}  

Die folgenden Aktionen müssen noch ergänzt werden, bzw aus den anderen Beiträgen übernommen werden.
Mitglied: Doskias
Lösung Doskias 15.01.2021 um 11:54:46 Uhr
Goto Top
Zitat von @Nxtrex:
> Klasse, dass ist genau dass was ich brauche und es funktioniert hervorragend face-smile musste nur das remove und move vertauschen weil die Dateien mit dem Datum ja da bleiben müssen :D .

Ja hab ich dann auch gesehen und im Skript korrigiert face-smile

Noch eine kleine Frage kann ich statt dem festen Datum auch ein tagesaktuelles Datum holen also abfragen wie bspw %date% ? Also damit man das Datum nicht immer Ändern muss im Script. Oder könnte man sogar abfragen wenn ein Format xx.xx.xxxx ist dass die Dateien dann auch verschoben werden?

$Dateien=get-childitem c:\temp\test
$heute=Get-Date -Format dd.MM.yyyy
foreach($Datei in $Dateien)
{
    $file = Get-Content c:\temp\test\$Datei
    $containsWord = $file | %{$_ -match $heute}
    if ($containsWord -contains $true) 
         {Move-Item c:\temp\test\$Datei 'C:\temp\test 2'}  
    else 
       {remove-item c:\temp\test\$Datei} 
}
Mitglied: Nxtrex
Nxtrex 15.01.2021 um 11:59:30 Uhr
Goto Top
Tip Top, jetzt klappt das auch mit dem Datum face-smile . Vielen Dank dafür.