awe 1 Geschrieben 24. Juli 2020 Melden Teilen Geschrieben 24. Juli 2020 Hallo zusammen ich bin dabei mir ein PowerShell skript zu basteln welches prüft ob Dateien in einem Ordner die Zeichenfolge "20200720" vorangestellt haben, falls nicht sollte dies vorangestellt werden, also der Dateiname sollte dann "20200720_datei.ods" aussehen. Das Thema PowerShell skript ist für mich noch relativ neu und ich habe mir jetzt mittels viel Nachlese und codebeispielen folgenden Code zusammengebastelt: $filename Get-ChildItem -Name if($filename -ne "20200720*" { rni $_.ToString("20200720") + "_" + $_.Name } wenn ich das Script ausführe rührt sich gar nichts - da komme ich jetzt nicht weiter.... Passt der Vergleichsoperator -ne hier nicht, oder mag der keine Wildcats? Vielleicht hat jemand einen Hinweis für mich thx Zitieren Link zu diesem Kommentar
testperson 1.707 Geschrieben 24. Juli 2020 Melden Teilen Geschrieben 24. Juli 2020 Hi, da fehlt einiges und am meisten wohl Grundlagen in Scripting/Programmierung bzw. PowerShell. Schau dir doch als erstes einmal an was ein "Get-ChildItem -Name" liefert und prüfe, ob da neben Dateien auch Ordner bei sind. Da du scheinbar nur *.ods Files möchtest, könntest du dir den "-Filter" Parameter ansehen. Ebenfalls wirst du am "Where" Statement nicht vorbeikommen, um Ordner auszuschließen bzw. mit der "StartsWith()" Funktion den Anfang des Dateinamens zu prüfen. Get-ChildItem: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-7 Where-Object: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/where-object?view=powershell-7 Beispielscripts: https://docs.microsoft.com/de-de/powershell/scripting/samples/sample-scripts-for-administration?view=powershell-7 Arbeiten mit Dateien und Ordnern: https://docs.microsoft.com/de-de/powershell/scripting/samples/working-with-files-and-folders?view=powershell-7 Sobald du die passende Code-Zeile hast, schauen wir weiter ;). Gruß Jan Zitieren Link zu diesem Kommentar
MurdocX 953 Geschrieben 24. Juli 2020 Melden Teilen Geschrieben 24. Juli 2020 vor 1 Minute schrieb awe: Passt der Vergleichsoperator -ne hier nicht, oder mag der keine Wildcats? Microsoft | About Comparison Operators https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-7 Du musst den Parameter "-like" benutzen, weil dieser für Strings und nicht für Objekte ist. Zitieren Link zu diesem Kommentar
awe 1 Geschrieben 24. Juli 2020 Autor Melden Teilen Geschrieben 24. Juli 2020 (bearbeitet) Danke für die Tipps, ich habe den code nun wiefolgt umgebaut: $filename Get-ChildItem -Filter *.ods -Recurse $auswahl Where-Object -NotLike $filename.StartsWith("20200720") rni $auswahl.ToString("20200720") + "_" + $_.Name Meine Überlegung: mit Zeile 1 selektiere ich alle .ods files (auch in den Unterordnern) und speichere diese in der Variable $filename die Variable $auswahl soll dann aus der Variable $filename alle dateinamen speichern die nicht mit 20200720 beginnen diesen Dateinamen würde ich dann 20200720_ voranstellen bearbeitet 24. Juli 2020 von awe Zitieren Link zu diesem Kommentar
testperson 1.707 Geschrieben 24. Juli 2020 Melden Teilen Geschrieben 24. Juli 2020 Hast du Zeile 1 oder irgendeine deiner Zeilen mal in die PowerShell getippt und ausgeführt oder bspw. in der PowerShell ISE ausgeführt? Zitieren Link zu diesem Kommentar
awe 1 Geschrieben 24. Juli 2020 Autor Melden Teilen Geschrieben 24. Juli 2020 Ja, passiert leider nichts. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 24. Juli 2020 Melden Teilen Geschrieben 24. Juli 2020 Wie ... "passiert nichts" ... nicht mal Fehlermeldungen? Zitieren Link zu diesem Kommentar
awe 1 Geschrieben 24. Juli 2020 Autor Melden Teilen Geschrieben 24. Juli 2020 sorry, da gabs jetzt irgendein anderes Problem. Natürlich kommt ein Fehler: Unerwartetes Token "Get-ChildItem" in Ausdruck oder Anweisung. In C:\Users\xxxx\ren_script_5.ps1:2 Zeichen:10 + $auswahl Where-Object -NotLike $filename.StartsWith("20200720") + ~~~~~~~~~~~~ Unerwartetes Token "Where-Object" in Ausdruck oder Anweisung. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : UnexpectedToken was sagt das "unerwartete token" aus? Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 24. Juli 2020 Melden Teilen Geschrieben 24. Juli 2020 (bearbeitet) Da fehlt mindestens ein gleichzeichen. $filename = ... Und eine Pipe. $auswahl | ... Außerdem hat $filename nichts mit $Auswahl zu tun. Was soll den wo stehen? Du solltest dir mal die Grundlagen aneignen. Pipes, Variablen,... bearbeitet 24. Juli 2020 von Dukel Zitieren Link zu diesem Kommentar
awe 1 Geschrieben 24. Juli 2020 Autor Melden Teilen Geschrieben 24. Juli 2020 (bearbeitet) ui ja danke - habs gleich korrigiert jetzt kommt Fehler beim Aufrufen der Methode, da [System.IO.FileInfo] keine Methode mit dem Namen "startswith" enthält. In C:\Users\ren_script_5.ps1:2 Zeichen:1 + $auswahl = Where-Object -NotLike $filename.StartsWith("20200720") + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : MethodNotFound Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat. In C:\Users\ren_script_5.ps1:4 Zeichen:1 + rni $auswahl.ToString("20200720") + "_" + $_.Name + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull OK danke - ich lese mich da nochmal mal ein bearbeitet 24. Juli 2020 von awe Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 24. Juli 2020 Melden Teilen Geschrieben 24. Juli 2020 vor 9 Minuten schrieb awe: ... ich lese mich da nochmal mal ein Das halte ich auch für eine sehr gute Idee ... wenn Du ein bissl Zeit hast, kannst Du es Dir ja vom Erfinder erklären lassen. Getting Started with PowerShell 3.0 ... ist ein bissl älter, aber die Grundlagen sind immernoch die gleichen. Zitieren Link zu diesem Kommentar
awe 1 Geschrieben 24. Juli 2020 Autor Melden Teilen Geschrieben 24. Juli 2020 Danke für den Link Zitieren Link zu diesem Kommentar
Beste Lösung awe 1 Geschrieben 25. Juli 2020 Autor Beste Lösung Melden Teilen Geschrieben 25. Juli 2020 Hallo der vollständigkeit halber möchte ich hier noch meine funktionierende Lösung welche ich nun zusammengebastelt habe teilen: Get-ChildItem -Path C:\Users\xxxxxx -Recurse -Exclude [0-9]* -Filter *.ods | foreach { Rename-Item $_.FullName ($_.CreationTime.ToString("yyyy-MM-dd") + "_" + $_.Name)} Vielen Dank für eure Tipps 1 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 26. Juli 2020 Melden Teilen Geschrieben 26. Juli 2020 Cool. Danke für's Teilen. Zitieren Link zu diesem Kommentar
testperson 1.707 Geschrieben 26. Juli 2020 Melden Teilen Geschrieben 26. Juli 2020 vor 15 Stunden schrieb awe: Hallo der vollständigkeit halber möchte ich hier noch meine funktionierende Lösung welche ich nun zusammengebastelt habe teilen: Get-ChildItem -Path C:\Users\xxxxxx -Recurse -Exclude [0-9]* -Filter *.ods | foreach { Rename-Item $_.FullName ($_.CreationTime.ToString("yyyy-MM-dd") + "_" + $_.Name)} Vielen Dank für eure Tipps Theoretisch, bzw. wenn ich es richtig verstanden habe, schließt du hier zu viel aus. Eine Datei "1Test.ods" würde bspw. durchrutschen. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.