none
ls - Nur Dateinamen anzeigen ohne z.B. 1: RRS feed

  • 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.

    Freitag, 28. Februar 2020 08:18

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
    Freitag, 28. Februar 2020 12:39

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''

    Freitag, 28. Februar 2020 08:27
  • 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")


    Freitag, 28. Februar 2020 08:37
  • 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-7

    Da 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.

    Freitag, 28. Februar 2020 09:18
  • 1. Ich möchte nur Dateien angezeigt haben die "full" im Namen haben

    Bitte hier im Forum keine Aliasse verwenden. Du würdest Dir selbst und allen, die Dir helfen wollen, einen Gefallen tun, wenn Du Deinen Powershell-Code so ausführlich wie möglich schreibst.
    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''

    Freitag, 28. Februar 2020 10:18
  • Du meintest, das grep, oder?
    Das ist hatte ich irgendwie vergessen zu übersetzen, sry...

    @Code

    Vielen 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


    Freitag, 28. Februar 2020 12:17
  • Vielen Dank, aber auch hier habe ich das Problem, dass es nicht als gleich angesehen wird.

    ??? Häh? Jetzt bin ich verwirrt.  ... ich glaub, es wäre hilfreich, wenn Du nochmal detailiert erklärtest, was genau Du erreichen möchtest. Wenn Du vorher shcon weißt, dass Du nach "full0.backup" suchst und den Pfad kensnt, kannst Du Dir das Leben doch viel leichter machen.

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Freitag, 28. Februar 2020 12:21
  • 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
    Freitag, 28. Februar 2020 12:39
  • 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.

    Freitag, 28. Februar 2020 12:42
  • 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"
    }

    Freitag, 28. Februar 2020 12:47
  • Perfekt danke, das wars
    Freitag, 28. Februar 2020 12:50