bahnski
Goto Top

RENAME-ITEM findet die Datei nicht

Hallo,
ich habe ein Problem mit besonderen Zeichen in Dateinamen, wenn ein Script diese umbenennen soll.
In meinem Beispiel habe ich eine Dateien mit dem Namen "Ritter-Kunibert[S;1234567890;DE,EN].jpg"
Es wird überprüft ob die Datei existiert und dann wird die Datei umbenannt. Das Überprüfen klappt, aber das umbenennen nicht.
Mein BeispielCode
$Folder = "D:\Grafik\TestFile\"  
$Files = get-childitem -Path $Folder 
foreach ($File in $Files){
    $FullName =[WildcardPattern]::Escape($File.FullName)
    if ((Test-Path  $FullName -PathType Any)){
        Write-Host "Datei $Fullname existiert!" -ForegroundColor Green  
        $NewName = "Ritter-Kunibert der 2.[S;1234567890;DE,EN].jpg"  
        rename-item -Path "$FullName" -NewName "$NewName"  
    }else{
        Write-Host "Datei $Fullname existiert nicht!" -ForegroundColor Red  
    }
}

Ob ich nun WildcardPattern nutze oder nicht. Bringt immer den gleichen Fehler. Wie schaffe ich es das Rename-Item mit Dateinamen und Pfade umgehen kann, wenn z.B diese Klammern [] drin vorkommen

Für jede Hilde, Anregung bin ich dankbar

Content-ID: 3377455261

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

Ausgedruckt am: 28.11.2024 um 13:11 Uhr

Pjordorf
Pjordorf 28.06.2024 um 21:04:21 Uhr
Goto Top
Hallo,

Zitat von @bahnski:
Ob ich nun WildcardPattern nutze oder nicht. Bringt immer den gleichen Fehler.
Und ist dein Fehler schon Volljährig und darf auch raus? Ansonsten schauen wir mal in Alten Büchern was dort an Fehlermeldungen steht und wir nehmen die 31428 dann (nein, das ist nicht Pi) face-smile

Gruss,
Peter
13676056485
Lösung 13676056485 28.06.2024, aktualisiert am 29.06.2024 um 08:37:03 Uhr
Goto Top
LiteralPath Parameter ist dein Freund
$Folder = "D:\Grafik\TestFile\"    
$Files = get-childitem -LiteralPath $Folder -File | select -First 1
foreach ($File in $Files){
    $NewName = 'Ritter-Kunibert der 2.[S;1234567890;DE,EN].jpg'  
    rename-item -LiteralPath $file.Fullname -NewName $NewName -force
}
Bei Verwendung von "Path" Parametern werden immer special chars interpretiert, LiteralPath dagegen macht das nicht und verwendet den Namen so wie er ist.
Die eckigen Klammern [] bezeichnen nämlich eine Auswahl an möglichen Zeichen als Platzhalter.
Guckst du das Beispiel

-LiteralPath
Gibt den aufzulösenden Pfad an. Der Wert des LiteralPath-Parameters wird genau wie eingegeben verwendet. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Escapezeichen enthält, schließen Sie ihn in einfache Anführungszeichen (') ein. Einfache Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren
bahnski
bahnski 29.06.2024 um 11:03:32 Uhr
Goto Top
Danke