Jump to content

gleiche Ordner umbenennen


Recommended Posts

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?

 

 

Link to post

Hallo, 

 

fangen wir mal von vorne an ;-) 

 

Beachte:

  1. Verwende keine Aliase, sondern den kompletten Befehl
  2. Wenn ein Befehl Fehler abwirft, schaue in der Dokumentation des Befehls, ob eine Eingabe fehl am Platz ist
  3. 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

Dokumentationen
Get-ChildItem (Microsoft.PowerShell.Management) - PowerShell | Microsoft Docs

ForEach-Object (Microsoft.PowerShell.Core) - PowerShell | Microsoft Docs

  • Like 1
Link to post

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

 

Link to post
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.

Link to post

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.

Edited by MurdocX
Link to post
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.

Edited by BOfH_666
Link to post
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.

Edited by BOfH_666
Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...