peterleb
Goto Top

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.

@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."

Content-ID: 665214

Url: https://administrator.de/forum/rename-per-kontextmenue-batch-windows-665214.html

Ausgedruckt am: 06.04.2025 um 06:04 Uhr

147669
147669 28.03.2021 aktualisiert um 22:32:32 Uhr
Goto Top
@echo off
for /f "delims=" %%a in ("%~dp1") do set "myFolder=%%~nxa"  
ren "%~1" "%myFolder%%~x1"  
PeterleB
PeterleB 28.03.2021 um 22:28:25 Uhr
Goto Top
Hallo,
Danke.

Zum Testen starte ich die BAT mit cmd /k.

Auch mit diesem Code passiert gar nichts.
Und wieder: "Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch."

Gruß
Peter
147669
147669 28.03.2021 aktualisiert um 22:34:34 Uhr
Goto Top
Geht hier, getestet. War nur ein kleiner Tippfehler bei einem Anführungszeichen, ist oben korrigiert!
PeterleB
PeterleB 29.03.2021 um 07:34:53 Uhr
Goto Top
Hallo,
Danke.

Es tut sich was.
Zum Prinzip nochmal:
Eine Datei im Ordner "Share" namens "Adressen.txt" soll durch die Aktion "Share.txt" heißen.

Zum jetzigen Zeitpunkt ("cmd /k" muß ich aus dem Registryeintrag herausnehmen) heißt die Datei nach dem Umbenennen ".txt", es wird also kein Dateiname übergeben.

Gruß
Peter
TK1987
Lösung TK1987 29.03.2021 aktualisiert um 09:24:27 Uhr
Goto Top
Moin Peter,

Zitat von @147669:
 @echo off
 for /f "delims=" %%a in ("%~dp1") do set "myFolder=%%~nxa"  
 
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
set dir=%~p1
for %%A in ("%dir:~0,-1%") do set "DirName=%%~nxA"  
ren "%~1" "%DirName%%~x1"  

BTW:
Zitat von @PeterleB:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\RenToFolderName]
@="Ordnername übernehmen"

[HKEY_CLASSES_ROOT\*\shell\RenToFolderName\command]
@="\"C:\\Scripts\\RenameWithFolder.bat\" \"%1\""
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 werden
<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
PeterleB
PeterleB 29.03.2021 um 11:30:53 Uhr
Goto Top
Hallo,

wunderbar, jetzt klappt es.
Danke

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 (?)
Oder ich schließe Ordner in der Behandlungsroutine aus.

Gruß
Peter
TK1987
Lösung TK1987 29.03.2021 aktualisiert um 13:09:55 Uhr
Goto Top
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.

# 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.
PeterleB
PeterleB 29.03.2021 aktualisiert um 14:59:31 Uhr
Goto Top
Hallo,

dann ist ja das Problem schon vollständig gelöst.

Vielen Dank für die Erklärungen.

Gruß
Peter

PS: Ich bin alleiniger Benutzer des Systems, da kann ich es bestimmt unter HKCR lassen, sonst ist der Eintrag natürlich unter HKCU besser.

Ein Icon aus der imageres.dll ziert jetzt noch das Kontextmenü:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\RenToFolderName]
@="Ordnername übernehmen"  
"Icon"="imageres.dll,89"  

[HKEY_CLASSES_ROOT\*\shell\RenToFolderName\command]
@="\"C:\\Scripts\\RenameWithFolder.bat\" \"%1\""