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:
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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 640956
Url: https://administrator.de/contentid/640956
Ausgedruckt am: 22.11.2024 um 06:11 Uhr
6 Kommentare
Neuester Kommentar
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:
Beachte aber: mit Contains prüfst du nicht nur die erste Zeile, sondern die ganze Datei.
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.
Der Code sucht das aktuelle Datum in der ersten Zeile:
Die folgenden Aktionen müssen noch ergänzt werden, bzw aus den anderen Beiträgen übernommen werden.
$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.
Zitat von @Nxtrex:
> Klasse, dass ist genau dass was ich brauche und es funktioniert hervorragend musste nur das remove und move vertauschen weil die Dateien mit dem Datum ja da bleiben müssen :D .
> Klasse, dass ist genau dass was ich brauche und es funktioniert hervorragend 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
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}
}