Powershell: Script läuft nur im Arbeitsverzeichnis
Hallo zusammen,
habe folgendes Script am Laufen (Dateien umbenennen):
Das Script läuft korrekt durch - aber nur wenn es sich im selben Verzeichnis befindet, wie die Dateien, die umbenannt werden sollen.
Gibt es eine Möglichkeit, das auch aus einem anderen Verzeichnis anzustoßen?
Ist vielleicht trivial, aber mein Verhältnis zur PS ist noch sehr novizial.
Win 7 Pro 64 bit, PS 3.0
Gruß an alle
ANKH
habe folgendes Script am Laufen (Dateien umbenennen):
$Quelle="D:\Scripts\Test_RenFile\"
$BasicName="Datei_"
$Extension=".txt"
$i=0
$Dateien = Get-ChildItem -path $Quelle *.txt
foreach($Datei in $Dateien) {
$i++
$AktuellerName=$BasicName+"{0:000}" -f $i+$Extension
Rename-Item -Path $Datei -NewName $AktuellerName
}
Das Script läuft korrekt durch - aber nur wenn es sich im selben Verzeichnis befindet, wie die Dateien, die umbenannt werden sollen.
Gibt es eine Möglichkeit, das auch aus einem anderen Verzeichnis anzustoßen?
Ist vielleicht trivial, aber mein Verhältnis zur PS ist noch sehr novizial.
Win 7 Pro 64 bit, PS 3.0
Gruß an alle
ANKH
Please also mark the comments that contributed to the solution of the article
Content-Key: 225072
Url: https://administrator.de/contentid/225072
Printed on: April 19, 2024 at 05:04 o'clock
12 Comments
Latest comment
Hallo ANKH,
so geht des:
$Datei.Fullname ist der volle Pfad zur Datei. Alternativ kannst du die Rename-Zeile auch so schreiben(ohne
Der Parameter
Grüße Uwe
so geht des:
$Quelle="D:\Scripts\Test_RenFile"
$BasicName="Datei_"
$i=0
$Dateien = Get-ChildItem -path "$Quelle\*.txt" -File
foreach($Datei in $Dateien) {
$i++
$AktuellerName=$BasicName+"{0:000}" -f $i+$Datei.Extension
Rename-Item -Path $Datei.Fullname -NewName $AktuellerName
}
-path
Parameter nur mit Übergabe des File-Objects):Rename-Item $Datei -NewName $AktuellerName
-File
bei Get-Childitem beschränkt die Rückgabe nur auf Dateien, es könnte ja ein Ordner z.B. Ordner.txt benannt sein, dieser würde dann fälschlich mit umbenannt werden (Achtung: Dieser Parameter funktioniert erst ab Powershell 3.0). Das Äquivalent dazu lautet:$Dateien = Get-ChildItem -path "$Quelle\*.txt" | ?{!$_.PSIsContainer}
Zitat von @Xaero1982:
Liegt an den " " und dem -File was er nicht kennt. Vielleicht ist es ja in der 3.0 anders. Installiere ich mal ...
Ja den Parameter kennt nur nur Powershell 3.0Liegt an den " " und dem -File was er nicht kennt. Vielleicht ist es ja in der 3.0 anders. Installiere ich mal ...
alternative für Powershell 2.0:
$Dateien = Get-ChildItem -path "$Quelle\*.txt" | ?{!$_.PSIsContainer}
dann kannst du's auch direkt so schreiben:
Rename-Item -Path $quelle$Datei -NewName $AktuellerName
Das geht auch in Powershell 2.0, innerhalb von doppelten Anführungszeichen werden Variablen expandiert, wohingegen bei Benutzung von einfachen => '$Variable' keine Expansion stattfindet!
Will man auf eine Eigenschaft eines Objektes innerhalb von doppelten Anführungszeichen zugreifen muss man folgende Variante hernehmen:
Probier mal dieses Beispiel:
Das geht 100% in PS2.0
Uwe
p.s. denke jetzt ist alles geklärt
Beitrag dann noch auf gelöst setzen.
Will man auf eine Eigenschaft eines Objektes innerhalb von doppelten Anführungszeichen zugreifen muss man folgende Variante hernehmen:
"$($Variable.Eigenschaft)"
$Name = "Mustermann"
echo "Max $Name"
Uwe
p.s. denke jetzt ist alles geklärt
Beitrag dann noch auf gelöst setzen.