Rename per Kontextmenü (Batch, Windows)
Hallo Ihr klugen Leute,
ich möchte per Kontextmenü im Windowsexplorer eine Datei umbenennen, so dass der neue Name dem Ordnername entspricht.
In der Registry habe ich einen Eintrag für alle Dateien angelegt:
Leider passiert gar nichts.
Wo steckt der Fehler?
Danke und Gruß
Peter
PS:
Das CMD-Fenster meldet: "Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch."
ich möchte per Kontextmenü im Windowsexplorer eine Datei umbenennen, so dass der neue Name dem Ordnername entspricht.
@echo off
setlocal
set myFolder=%~pn
ren "%~1" "%myFolder%"
In der Registry habe ich einen Eintrag für alle Dateien angelegt:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\RenToFolderName]
@="Ordnername übernehmen"
[HKEY_CLASSES_ROOT\*\shell\RenToFolderName\command]
@="\"C:\\Scripts\\RenameWithFolder.bat\" \"%1\""
Leider passiert gar nichts.
Wo steckt der Fehler?
Danke und Gruß
Peter
PS:
Das CMD-Fenster meldet: "Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch."
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 665214
Url: https://administrator.de/forum/rename-per-kontextmenue-batch-windows-665214.html
Ausgedruckt am: 06.04.2025 um 06:04 Uhr
8 Kommentare
Neuester Kommentar

@echo off
for /f "delims=" %%a in ("%~dp1") do set "myFolder=%%~nxa"
ren "%~1" "%myFolder%%~x1"

Geht hier, getestet. War nur ein kleiner Tippfehler bei einem Anführungszeichen, ist oben korrigiert!
Moin Peter,
BTW:
<code trype=plain>Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\*\shell\RenToFolderName]
@="Ordnername übernehmen"
[HKEY_CURRENT_USER\Software\Classes\*\shell\RenToFolderName\command]
@="\"C:\\Scripts\\RenameWithFolder.bat\" \"%1\""
Gruß Thomas
Zitat von @147669:
das kann so nicht funktionieren, da %~dp1 immer noch einen Backslash am Ende mit ausgibt und die For-Schleife diese Zeichenkette somit als Pfad interpretiert --> %%~nxa hat daher keinen Inhalt. @echo off
for /f "delims=" %%a in ("%~dp1") do set "myFolder=%%~nxa"
@echo off
set dir=%~p1
for %%A in ("%dir:~0,-1%") do set "DirName=%%~nxA"
ren "%~1" "%DirName%%~x1"
BTW:
Zitat von @PeterleB:
Ist es wirklich notwendig, den Kontextmenüeintrag Benutzerübergreifend zu erstellen? Sofern nicht zwingend erforderlich, sollte dieser immer nur für den aktuellen Benutzer erstellt werdenWindows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\RenToFolderName]
@="Ordnername übernehmen"
[HKEY_CLASSES_ROOT\*\shell\RenToFolderName\command]
@="\"C:\\Scripts\\RenameWithFolder.bat\" \"%1\""
<code trype=plain>Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\*\shell\RenToFolderName]
@="Ordnername übernehmen"
[HKEY_CURRENT_USER\Software\Classes\*\shell\RenToFolderName\command]
@="\"C:\\Scripts\\RenameWithFolder.bat\" \"%1\""
Gruß Thomas
Zitat von @PeterleB:
Mit dem Registryeintrag hast Du vielleicht Recht.
Lieber jedoch wäre mir ein Knoten, der nur für "Files" gilt, denn Ordner oder andere Objekte machen für die Umbenennung keinen Sinn.
Es gibt: HKEY_CLASSES_ROOT\file (?)
Der Knoten * gilt nur für Dateien, ist hier also schon richtig.Mit dem Registryeintrag hast Du vielleicht Recht.
Lieber jedoch wäre mir ein Knoten, der nur für "Files" gilt, denn Ordner oder andere Objekte machen für die Umbenennung keinen Sinn.
Es gibt: HKEY_CLASSES_ROOT\file (?)
# Nur Dateien:
HKEY_CURRENT_USER\Software\Classes\* # Aktueller Benutzer
HKEY_LOCAL_MACHINE\Software\Classes\* # Benutzerübergreifend
# Dateien und Ordner:
HKEY_CURRENT_USER\Software\Classes\AllFilesystemObjects # Aktueller Benutzer
HKEY_LOCAL_MACHINE\Software\Classes\AllFilesystemObjects # Benutzerübergreifend
# Nur Ordner:
HKEY_CURRENT_USER\Software\Classes\Directory # Aktueller Benutzer
HKEY_LOCAL_MACHINE\Software\Classes\Directory # Benutzerübergreifend
# Einzelner Dateityp, z.B. nur TXT-Dateien:
HKEY_CURRENT_USER\Software\Classes\SystemFileAssociations\.txt # Aktueller Benutzer
HKEY_LOCAL_MACHINE\Software\Classes\SystemFileAssociations\.txt # Benutzerübergreifend
Die Knoten unter HKEY_CLASSES_ROOT werden aus HKEY_LOCAL_MACHINE\Software\Classes\ und HKEY_CURRENT_USER\Software\Classes\ generiert.
PS: Knoten die noch nicht existieren können einfach erstellt werden.