Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Powershell: Script läuft nur im Arbeitsverzeichnis

Frage Entwicklung Batch & Shell

Mitglied: AnkhMorpork

AnkhMorpork (Level 2) - Jetzt verbinden

20.12.2013, aktualisiert 21.12.2013, 1924 Aufrufe, 12 Kommentare, 1 Danke

Hallo zusammen,

habe folgendes Script am Laufen (Dateien umbenennen):

01.
$Quelle="D:\Scripts\Test_RenFile\" 
02.
$BasicName="Datei_" 
03.
$Extension=".txt" 
04.
$i=0 
05.
 
06.
$Dateien = Get-ChildItem -path $Quelle *.txt 
07.
foreach($Datei in $Dateien) { 
08.
	$i++ 
09.
	$AktuellerName=$BasicName+"{0:000}" -f $i+$Extension  
10.
	Rename-Item -Path $Datei -NewName $AktuellerName    
11.
}
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
Mitglied: Xaero1982
20.12.2013 um 18:58 Uhr
Nabend,

01.
Rename-Item -Path $quelle""$Datei -NewName $AktuellerName   
Die Zeile damit ersetzen und dann sollte es gehen.

Gruß
Bitte warten ..
Mitglied: colinardo
LÖSUNG 20.12.2013, aktualisiert 21.12.2013
Hallo ANKH,
so geht des:
01.
$Quelle="D:\Scripts\Test_RenFile" 
02.
$BasicName="Datei_" 
03.
$i=0 
04.
$Dateien = Get-ChildItem -path "$Quelle\*.txt" -File 
05.
foreach($Datei in $Dateien) { 
06.
	$i++ 
07.
	$AktuellerName=$BasicName+"{0:000}" -f $i+$Datei.Extension  
08.
	Rename-Item -Path $Datei.Fullname -NewName $AktuellerName    
09.
}
$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
Bitte warten ..
Mitglied: Xaero1982
20.12.2013 um 19:14 Uhr
Moin,

also zumindest unter Powershell v2 frisst er die Zeile nicht
01.
$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ß
Bitte warten ..
Mitglied: colinardo
20.12.2013, aktualisiert um 19:21 Uhr
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}
Bitte warten ..
Mitglied: Xaero1982
20.12.2013 um 19:18 Uhr
Okay. Na dann spar ich mir die Installation.

Gruß
Bitte warten ..
Mitglied: AnkhMorpork
20.12.2013 um 19:23 Uhr
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
Bitte warten ..
Mitglied: AnkhMorpork
20.12.2013, aktualisiert um 19:31 Uhr
Hallo Xaero,

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

Gruß

ANKH

Edit: zu spät ...
Bitte warten ..
Mitglied: colinardo
20.12.2013, aktualisiert um 20:33 Uhr
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  
Bitte warten ..
Mitglied: AnkhMorpork
20.12.2013 um 19:39 Uhr
Leute, you are klasse !!!

nur mal so ...

Gruß

ANKH
Bitte warten ..
Mitglied: Xaero1982
20.12.2013, aktualisiert um 20:07 Uhr
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

Gruß
Bitte warten ..
Mitglied: colinardo
20.12.2013, aktualisiert um 20:34 Uhr
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:
01.
$Name = "Mustermann" 
02.
echo "Max $Name"
Das geht 100% in PS2.0

Uwe

p.s. denke jetzt ist alles geklärt
Beitrag dann noch auf gelöst setzen.
Bitte warten ..
Mitglied: AnkhMorpork
21.12.2013 um 14:18 Uhr
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
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst PC nach einem Kopiervorgang herunterfahren - PowerShell Script? (4)

Frage von Stefan007 zum Thema Batch & Shell ...

Windows Server
PowerShell Script - Ordnerrechte setzen (7)

Frage von desmondjames zum Thema Windows Server ...

Batch & Shell
gelöst Powershell Script mit Zertifikat signieren (5)

Frage von zamsi7 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(9)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(6)

Anleitung von BassFishFox zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Exchange Server
Exchange 2016 Standard Server 2012 R2 Hetzner Mail (36)

Frage von Datsspeed zum Thema Exchange Server ...

Verschlüsselung & Zertifikate
Mit Veracrypt eine zweite interne (non-system) Festplatte verschlüsseln (10)

Frage von Bernulf zum Thema Verschlüsselung & Zertifikate ...

C und C++
Methode multiple return values (8)

Frage von mayho33 zum Thema C und C ...

Microsoft Office
Übertrag in eine andere Tabelle (6)

Frage von charmeur zum Thema Microsoft Office ...