Umbenennen fehlerhafter Dateiordner
Moin,
ich stehe gerade vor einem kleinen Problem... Und zwar sollte, bzw. hat einer unserer Außendienst-Mitarbeiter über VPN und einem Android-Smartphone täglich Bilder von durchgeführten Reparaturen auf Server ablegen. Dabei hat er unbewusst einen Fehler gemacht und den Dateiordnern immer am Ende des Namens einen Punkt hinzugefügt, um das Datum abzukürzen
Beispiel: Auftragsnr_Stadt_23.03.
Nun tritt das Problem unter Windows auf, dass auf die Ordner nicht zugegriffen werden kann mit der Meldung:
Da dies einige 100 Ordner betrifft wollte ich dies nicht händisch machen... und dachte ans Umbenennen mit einem Powershell-Script bzw. der Batch-File.
Aber auch da bekomme ich die Meldungen folgende Meldung:
Mein Code zum Umbenennen ist folgender und sollte eigentlich auch funktionieren:
ich stehe gerade vor einem kleinen Problem... Und zwar sollte, bzw. hat einer unserer Außendienst-Mitarbeiter über VPN und einem Android-Smartphone täglich Bilder von durchgeführten Reparaturen auf Server ablegen. Dabei hat er unbewusst einen Fehler gemacht und den Dateiordnern immer am Ende des Namens einen Punkt hinzugefügt, um das Datum abzukürzen
Beispiel: Auftragsnr_Stadt_23.03.
Nun tritt das Problem unter Windows auf, dass auf die Ordner nicht zugegriffen werden kann mit der Meldung:
Location is not available - Q:\Service\2022\ Auftragsnr_Stadt_23.03 is unavailable. If the location is on this PC, make sure the device or drive is connected or the disc is inserted, and then try again. If the location is on a network, make sure you’re connected to the network or Internet, and then try again. If the location still can’t be found, it might have been moved or deleted."
Da dies einige 100 Ordner betrifft wollte ich dies nicht händisch machen... und dachte ans Umbenennen mit einem Powershell-Script bzw. der Batch-File.
Aber auch da bekomme ich die Meldungen folgende Meldung:
Cannot rename because item at 'Q:\Service\2022\ Auftragsnr_Stadt_23.03.' does not exist.
Mein Code zum Umbenennen ist folgender und sollte eigentlich auch funktionieren:
@echo off
chcp 65001 >nul & rem umlaute...
setlocal enableDelayedExpansion
rem verzeichnisliste holen
for /f "tokens=*" %%a in ('dir /b /a:d ') do (
set "folderName=%%~a"
set "newFolderName=!folderName:_= !"
@REM echo %%a =^> !newFolderName!
set lastChar=!folderName:~-1!
IF !lastChar!==. (
@REM echo %%a =^> !newFolderName:~0,-1!
ren "%%a" "!newFolderName:~0,-1!"
)
)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2261522188
Url: https://administrator.de/contentid/2261522188
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
3 Kommentare
Neuester Kommentar
Da für Windows ein Punkt am Ende eines Verzeichnisses ein ungültiges Zeichen ist, schnapp dir ne Linux-Live CD oder machs im OS über WSL und benenne die Ordner in einem Aufwasch um, denn für Linux ist ein Punkt am Ende eines Ordners beim Zugriff kein Problem
find /path/to/rootfolder -type d -regex ".+\.$" | while read folder ;do mv "$folder" "${folder%.}";done
Servus,
über \\?\[Pfad] lässt sich das auch unter Windows bewerkstelligen wenn es sein muss.
Damit sich die Shell nicht über die fehlerhaften Ordnernamen beschwert ist dann noch ein kleiner Umweg für das Listen der Ordner nötig, hier per Powershell
Grüße Uwe
über \\?\[Pfad] lässt sich das auch unter Windows bewerkstelligen wenn es sein muss.
Damit sich die Shell nicht über die fehlerhaften Ordnernamen beschwert ist dann noch ein kleiner Umweg für das Listen der Ordner nötig, hier per Powershell
[IO.Directory]::GetDirectories('Q:\Service\2022') | ?{$_ -like '*.'} | %{rename-item -Path "\\?\$_" -NewName ([io.path]::GetFileName($_.trimEnd('.'))) -verbose}