ankhmorpork
Goto Top

Powershell: Script läuft nur im Arbeitsverzeichnis

Hallo zusammen,

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

Content-Key: 225072

Url: https://administrator.de/contentid/225072

Printed on: April 16, 2024 at 18:04 o'clock

Member: Xaero1982
Xaero1982 Dec 20, 2013 at 17:58:57 (UTC)
Goto Top
Nabend,

Rename-Item -Path $quelle""$Datei -NewName $AktuellerName     

Die Zeile damit ersetzen und dann sollte es gehen.

Gruß
Member: colinardo
Solution colinardo Dec 20, 2013, updated at Dec 21, 2013 at 13:07:20 (UTC)
Goto Top
Hallo ANKH,
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   
}
$Datei.Fullname ist der volle Pfad zur Datei. Alternativ kannst du die Rename-Zeile auch so schreiben(ohne -path Parameter nur mit Übergabe des File-Objects):
Rename-Item $Datei -NewName $AktuellerName
Der Parameter -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}
Grüße Uwe
Member: Xaero1982
Xaero1982 Dec 20, 2013 at 18:14:45 (UTC)
Goto Top
Moin,

also zumindest unter Powershell v2 frisst er die Zeile nicht
$Dateien = Get-ChildItem -path "$Quelle*.txt" -File   

Liegt an den " " und dem -File was er nicht kennt. Vielleicht ist es ja in der 3.0 anders. Installiere ich mal ...

Gruß
Member: colinardo
colinardo Dec 20, 2013 updated at 18:21:30 (UTC)
Goto Top
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.0
alternative für Powershell 2.0:
$Dateien = Get-ChildItem -path "$Quelle\*.txt" | ?{!$_.PSIsContainer}
Member: Xaero1982
Xaero1982 Dec 20, 2013 at 18:18:29 (UTC)
Goto Top
Okay. Na dann spar ich mir die Installation.

Gruß
Member: AnkhMorpork
AnkhMorpork Dec 20, 2013 at 18:23:57 (UTC)
Goto Top
Hallo Uwe,

wieder einmal Dank für deine Hilfe!

Werde das probieren - habe aber im Moment keinen Zugriff auf mein Script. Ich melde mich!

Gruß

ANKH
Member: AnkhMorpork
AnkhMorpork Dec 20, 2013 updated at 18:31:16 (UTC)
Goto Top
Hallo Xaero,

Test läuft ...demnächst ... Dank!

Gruß

ANKH

Edit: zu spät ...
Member: colinardo
colinardo Dec 20, 2013 updated at 19:33:00 (UTC)
Goto Top
Zitat von @Xaero1982:
Rename-Item -Path $quelle""$Datei -NewName $AktuellerName
dann kannst du's auch direkt so schreiben:
Rename-Item -Path $quelle$Datei -NewName $AktuellerName  
Member: AnkhMorpork
AnkhMorpork Dec 20, 2013 at 18:39:45 (UTC)
Goto Top
Leute, you are klasse !!!

nur mal so ...

Gruß

ANKH
Member: Xaero1982
Xaero1982 Dec 20, 2013 updated at 19:07:00 (UTC)
Goto Top
Mit der Powershell 2.0 funktioniert das wie ich es oben schrieb. MIt den "$variable" kommt er nicht klar, weil er das nicht als Variable erkennt. Daher klappt das da nicht. Wie das bei der 3.0 ist weiß ich nicht.

Stimm ich dir aber zu, dass deine Version die schönere ist face-smile

Gruß
Member: colinardo
colinardo Dec 20, 2013 updated at 19:34:11 (UTC)
Goto Top
Zitat von @Xaero1982:
MIt den "$variable" kommt er nicht klar, weil er das
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:
"$($Variable.Eigenschaft)"
Probier mal dieses Beispiel:
$Name = "Mustermann"  
echo "Max $Name"  
Das geht 100% in PS2.0

face-wink Uwe

p.s. denke jetzt ist alles geklärt
Beitrag dann noch auf gelöst setzen.
Member: AnkhMorpork
AnkhMorpork Dec 21, 2013 at 13:18:00 (UTC)
Goto Top
Hallo,

vielen Dank an euch. Wieder was dazugelernt. Ich arbeite weiter ...
Wie Scripting Guy Ed Wilson sinngemäß sagte: Es ist leicht Powershell zu lernen, aber nahezu unmöglich, sie zu beherrschen.

In diesem Sinne ...

ANKH