al3x 11 Geschrieben 8. Oktober 2021 Melden Teilen Geschrieben 8. Oktober 2021 Servus, ich versuche gerade alle Ordner namens "Neuer Ordner" unterhalb von e:\temp per PS umzubenennen. Dabei habe ich an so ein Konstrukt gedacht: gci -path e:\temp -recurse "Neuer Ordner" |foreach-object rename-item "Neuer Ordner" "Ordner-Bla" ...komme aber wegen invalid-argument irgendwie nicht weiter. Hat jemand einen Tipp? Zitieren Link zu diesem Kommentar
MurdocX 952 Geschrieben 8. Oktober 2021 Melden Teilen Geschrieben 8. Oktober 2021 Hallo, fangen wir mal von vorne an Beachte: Verwende keine Aliase, sondern den kompletten Befehl Wenn ein Befehl Fehler abwirft, schaue in der Dokumentation des Befehls, ob eine Eingabe fehl am Platz ist Wenn du Dir nicht sicher bist, dann schaue dir die Befehlsbeispiele in der Dokumentation an und vergleiche Fehler: Der "-recurse" Parameter ist lt. Dokumentation ein Switch, also BOOL (Ja/Nein) Parameter. "Neuer Ordner" ist kein JA/NEIN ForEach-Object fehlt es an den Klammern, ForEach-Object ist in der Iteration anonym, deshalb muss eine Laufzeitvariable $_ dafür genommen werden, die das aktuelle Objekt enthält DokumentationenGet-ChildItem (Microsoft.PowerShell.Management) - PowerShell | Microsoft Docs ForEach-Object (Microsoft.PowerShell.Core) - PowerShell | Microsoft Docs 1 Zitieren Link zu diesem Kommentar
al3x 11 Geschrieben 8. Oktober 2021 Autor Melden Teilen Geschrieben 8. Oktober 2021 Hallo Jan, danke für die Aufklärung. Ich dachte -recurse ist notwendig, damit rekursiv durchsucht wird. Ich habe es nun so probiert, $folderpath = 'E:\temp' $items = Get-ChildItem -recurse $folderpath "Neuer Ordner" foreach( $i in $items) { Rename-Item $i.FullName "Blubb" } aber dann ist das Problem wenn der Namen mehrmals vorkommt: ...\Neuer Ordner\...\Neuer Ordner Zitieren Link zu diesem Kommentar
MurdocX 952 Geschrieben 8. Oktober 2021 Melden Teilen Geschrieben 8. Oktober 2021 vor 5 Minuten schrieb al3x: aber dann ist das Problem wenn der Namen mehrmals vorkommt: Das ist Prinzipiell richtig. Das wird auch forciert, weil du ja bis in die unterste Ordnerebene mit "-recurse" die Ordner und Dateien untersuchst. Lässt du diesen weg, dann bezieht sich das nur auf die Ordner/Dateien in $folderPath. Get-Childitem bietet Dir auch die Möglichkeit die Suche auf "Nur Ordner" oder "Nur Dateien" einzuschränken. Oder auch einen "-filter" einzusetzen. Zitieren Link zu diesem Kommentar
al3x 11 Geschrieben 8. Oktober 2021 Autor Melden Teilen Geschrieben 8. Oktober 2021 okay... aber wie löse ich es, wenn auch alle Unterordner umbenannt werden sollen? Zitieren Link zu diesem Kommentar
MurdocX 952 Geschrieben 8. Oktober 2021 Melden Teilen Geschrieben 8. Oktober 2021 (bearbeitet) In dem ForEach musst du das Objekt $i abfragen, ob es den Ordnernamen "Neuer Ordner" hat und erst dann den Ordner umbenennen. Das geht am einfachsten mit einer IF-Abfrage. Aktuell werden so alle Ordner und Dateien umbenannt. $folderpath "Neuer Ordner" Dafür fehlen noch die Angaben der Parameter von Get-ChildItem. bearbeitet 8. Oktober 2021 von MurdocX Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 8. Oktober 2021 Melden Teilen Geschrieben 8. Oktober 2021 (bearbeitet) vor 55 Minuten schrieb al3x: Ich dachte -recurse ist notwendig, damit rekursiv durchsucht wird. Es hilft meiner Meinung nach sehr dem Verständnis und der Lesbarkeit, wenn man die Parameternamen nicht weglässt. Nutzt man die "Tab-Vervollständigung" ist es auch nicht soo viel mehr zu tippen. Deine Code-Zeile $items = Get-ChildItem -recurse $folderpath "Neuer Ordner" ... würde dann zu ... $items = Get-ChildItem -Path $folderpath -Name "Neuer Ordner" -Recurse ... und ich packe Switch-Parameter immer gern ans Ende des Kommandos. bearbeitet 8. Oktober 2021 von BOfH_666 Zitieren Link zu diesem Kommentar
al3x 11 Geschrieben 8. Oktober 2021 Autor Melden Teilen Geschrieben 8. Oktober 2021 hm jetzt bin ich raus..... ?? foreach( $i in $items) { if ($i -match "Neuer Ordner") { Rename-Item $i.FullName "Blubb" }} Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 8. Oktober 2021 Melden Teilen Geschrieben 8. Oktober 2021 vor 1 Minute schrieb al3x: hm jetzt bin ich raus Warum? Zitieren Link zu diesem Kommentar
al3x 11 Geschrieben 8. Oktober 2021 Autor Melden Teilen Geschrieben 8. Oktober 2021 Gerade eben schrieb BOfH_666: Warum? auf Jan bezogen. Deine Anmerkung macht Sinn, kann man sich die Syntax vielleicht besser verinnerlichen.... Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 8. Oktober 2021 Melden Teilen Geschrieben 8. Oktober 2021 (bearbeitet) vor 7 Minuten schrieb al3x: kann man sich die Syntax vielleicht besser verinnerlichen.... Die Hilfe ist PowerShell eingebaut. Mit "Get-Help <cmdlet>" bekommst Du die Syntax angezeigt. Ausserdem kannst Du, wenn Du den Namen eines cmdlet getippt hast und nicht weißt, wie's weitergeht einfach ein "-" tippen und dann mit Tab durch die Parameter "blättern" oder in der ISE wird Dir, wenn Du den "-" eingibst, schon die Liste der Parameter aufgeklappt. Edit: Noch besser wäre, wenn Du VSCode für die Entwicklung von PowerShell-Code benutzt. Dort bekommst Du die meiste Hilfe. bearbeitet 8. Oktober 2021 von BOfH_666 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.