Benutzer mit den meisten Antworten
ls - Nur Dateinamen anzeigen ohne z.B. 1:

Frage
-
Ich habe folgenden Befehl:
ls -Name D:\blub\backup\ | sort lastwritetime -Descending | findstr -I -N full | select -First 1
Die Ausgabe ist:
1:full1.backupDa ich darüber gerne einen vergleich mit IF machen möchte brauche ich nur den Namen.
Wie bekomme ich das hin, am besten ohne String-Manipulation, da ich so etwas für Fehleranfällig halte.
Vielen Dank für die Hilfe
Warum:
Ich habe ein Backup, welches jeden Tag abwechselnd in 2 Dateien reinschreiben soll.Also: A -> B -> A -> B ...
Um rauzufinden welches Backup gerade mit ersetzt werden soll, suche ich den Namen des ältesten Backups.
- Bearbeitet JokerGermany Freitag, 28. Februar 2020 08:21
Antworten
-
Dein Vergleich muss doch scheitern, da du ein Objekt mit einem String vergleichst.
Get-Childitem liefert dir ein File-Objekt, somit ist
$oldBackup.Name -eq $Referenz
zu prüfen.- Bearbeitet Der Suchende Freitag, 28. Februar 2020 12:39
- Als Antwort markiert JokerGermany Freitag, 28. Februar 2020 12:50
Alle Antworten
-
Bitte hier im Forum und in Skripten keine Aliasse benutzen. Und bitte hier im Forum Code als Code formatieren. Danke.
Wenn ich Dich richtig verstanden habe, sollte das in diese Richtung gehen:
Get-ChildItem -Name D:\blub\backup\ | Sort-Object lastwritetime -Descending | Select-Object -First 1 -Property Name
Wenn Du Dir unsicher bist, welche Property Du brauchst, lässt Du Dir einfach erstmal alle ausgeben ...Get-ChildItem -Name D:\blub\backup\ | Sort-Object lastwritetime -Descending | Select-Object -First 1 -Property *
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
-
1. Ich möchte nur Dateien angezeigt haben die "full" im Namen haben.
2. gibt er hier dann aus:"PSChildName-----------
full1.backup"
Ich wollte es für so etwas verwenden:
If ( (dir -Name D:\blub\backup\ | sort lastwritetime -Descending | grep -I -N full | select -First 1) -eq "full1.backup")
-
Du solltest wie in obigem Beispiel "get-childitem" statt der alten cmd-Befehle verwenden.
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-7Da kannst du dann auch ein Muster angeben "-filter".
Damit erhältst du dann File-Objekte deren Eigenschaften dann z.B. dein Namen (ohne Pfad) enthalten. -
1. Ich möchte nur Dateien angezeigt haben die "full" im Namen haben
Get-ChildItem -Path 'D:\blub\backup' -Filter '*full*' -File | Sort-Object -Property lastwritetime -Descending | Select-Object -First 1 -Property Name
So wird auch auf den erstn Blick deutlich, was Du eigentlich erreichen möchtest.
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
-
Du meintest, das grep, oder?
Das ist hatte ich irgendwie vergessen zu übersetzen, sry...
@CodeVielen Dank, aber auch hier habe ich das Problem, dass es nicht als gleich angesehen wird.
Das ist der Code:
$Referenz="full0.backup" $oldBackup=Get-ChildItem -Path 'D:\blub\backup' -Filter '*full*' -File | Sort-Object -Property lastwritetime -Descending | Select-Object -First 1 -Property Name If ( $oldBackup -eq $Referenz) { echo "Yeah" } else { echo "Nope" } echo $oldBackup
Das hier ist die Ausgabe:
Nope
Name
----
full0.backup
- Bearbeitet JokerGermany Freitag, 28. Februar 2020 12:17
-
Vielen Dank, aber auch hier habe ich das Problem, dass es nicht als gleich angesehen wird.
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
-
Dein Vergleich muss doch scheitern, da du ein Objekt mit einem String vergleichst.
Get-Childitem liefert dir ein File-Objekt, somit ist
$oldBackup.Name -eq $Referenz
zu prüfen.- Bearbeitet Der Suchende Freitag, 28. Februar 2020 12:39
- Als Antwort markiert JokerGermany Freitag, 28. Februar 2020 12:50
-
Es wird jeden Tag ein Vollbackup einer Datenbank erstellt.
Nach 2 Tagen wird es überschrieben. Daher wird jeden Tag abwechselnd einmal in die Datei full0.backup und einmal in die Datei full1.backup geschrieben.
Um zu wissen welches Backup nun an der Reihe ist, möchte ich ermitteln welches Backup von den beiden am ältesten ist und somit überschrieben wird.Meine Idee war daher eine Referenz zu nehmen full0.backup.
Ist es identisch mit der ermittelten, dann wird
backup_start FullBackup0
ist es nicht identisch wird
FullBackup1 ausgeführt. -
Dann mach es doch auch so wie vorgeschlagen:
$Referenz="full0.backup" $oldBackup=Get-ChildItem -Path 'D:\blub\backup' -Filter '*full*' -File | Sort-Object -Property lastwritetime -Descending | Select-Object -First 1 -Property Name If ( $oldBackup.Name -eq $Referenz) { echo "Yeah" } else { echo "Nope" }