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-Key: 665214

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

Printed on: April 19, 2024 at 16:04 o'clock

Mitglied: 147669
147669 Mar 28, 2021 updated at 20:32:32 (UTC)
Goto Top
@echo off
for /f "delims=" %%a in ("%~dp1") do set "myFolder=%%~nxa"  
ren "%~1" "%myFolder%%~x1"  
Member: PeterleB
PeterleB Mar 28, 2021 at 20:28:25 (UTC)
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
Mitglied: 147669
147669 Mar 28, 2021 updated at 20:34:34 (UTC)
Goto Top
Geht hier, getestet. War nur ein kleiner Tippfehler bei einem Anführungszeichen, ist oben korrigiert!
Member: PeterleB
PeterleB Mar 29, 2021 at 05:34:53 (UTC)
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
Member: TK1987
Solution TK1987 Mar 29, 2021 updated at 07:24:27 (UTC)
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
Member: PeterleB
PeterleB Mar 29, 2021 at 09:30:53 (UTC)
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
Member: TK1987
Solution TK1987 Mar 29, 2021 updated at 11:09:55 (UTC)
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.
Member: PeterleB
PeterleB Mar 29, 2021 updated at 12:59:31 (UTC)
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\""