Batch Kontextmenü-Eintrag für Windows XP

Z33V

Cadet 4th Year
Registriert
Juni 2011
Beiträge
70
Hallo,

die folgenden Zeilen fügen einen aus Windows 7 bekannten Kontextmenüeintrag in Windows XP hinzu.
Da mein Bruder Windows 7 nutzt, ich hingegen noch Xp benutze, ahbe ich gedacht, ich füe die Funktion "Übergeordneten Ordner öffnen" bei verknüpfungen hinzu, da ich diese Funktion sehr sinnvoll finde und in XP nicht vermissen möchte.


Code:
@echo off &setlocal
chcp 1252>nul
set ue=ü
set ae=ä
set oe=ö
set Uue=Ü
set Aae=Ä
set Ooe=Ö
set ss=ß
chcp 850>nul

title Kontextmen%ue%eintrag f%ue%r Verkn%ue%pfungen

::Vorbereitungen
md "%ProgramFiles%\Linkshell" 2>nul
set log="%ProgramFiles%\Linkshell\install.log"
if exist "%log%" del "%log%" 2>nul
> %log% echo Installationslog des Kontextmenüeintrages für Verknüpfungen
>> %log% echo ____________________________________________________________
>> %log% echo Variablen werden gesetzt
set "uninstall="
set vbsFullName="%ProgramFiles%\Linkshell\link.vbs"
>> %log% echo ...
>> %log% echo Variablen wurden gesetzt

::Einleitung
echo Dieses Programm f%ue%gt den Eintrag
echo "%Uue%bergeordneten Ordner %oe%ffnen" in's Kontextmen%ue% hinzu.
echo Nach der Installation hat man bei Verkn%ue%pfungen
echo eine neue Option, welche den %ue%bergeordneten Ordner %oe%ffnet, zu Verf%ue%gung
echo.
echo.

::Es wird als erstes überprüft, ob der Kontextmenüeintrag schon vorhanden ist.

::Überprüfung der Registry
REG QUERY "HKCR\lnkfile\shell\%ue%ber" 2>nul >nul
if "%errorlevel%"=="1" (
goto :askInstall
) else (
goto :askUninstall
)


::Frageoptionen
:askInstall
echo Kontextmen%ue%-Eintrag nicht vorhanden
set /p "install=Soll der Eintrag nun INSTALLIERT werden? (Ja/Nein): "
if not defined install goto :errleerins
:checkins
if /i "%install:~,1%" EQU "J" goto :Install
if /i "%install:~,1%" EQU "N" goto :NotInstall
goto :errfalschins

:askUninstall
echo Kontextmen%ue%-Eintrag schon vorhanden
set /p "uninstall=Soll er stattdessen DEINSTALLIERT werden? (Ja/Nein): "
if not defined uninstall goto :errleerunins
:checkunins
if /i "%uninstall:~,1%" EQU "J" goto :Uninstall
if /i "%uninstall:~,1%" EQU "N" goto :NotUninstall
goto :errfalschunins


::Ausführung der Optionen
:Install

>> %log% echo.
>> %log% echo Installationsvorgang wird gestartet
>> %log% echo Script wird erstellt
echo.
echo Ben%oe%tigtes Script wird erstellt
(
echo Set oSh=WScript.CreateObject^("WScript.Shell"^)
echo LNKfullname=oSh.CreateShortcut^(WScript.Arguments^(0^)^).TargetPath
echo LNKpath=WScript.CreateObject^("Scripting.FileSystemObject"^).GetParentFolderName^(LNKfullname^)
echo oSh.Run "explorer.exe """ ^& LNKpath ^& """"
)>"%vbsFullName%"
>> %log% echo ...
echo ...
>> %log% echo Script wurde erstellt
echo Ben%oe%tigtes Script wurde erfolgreich erstellt
echo.
>> %log% echo Registryeinträge werden geschrieben
echo Ben%oe%tigte Registryeintr%ae%ge werden geschrieben
reg add "HKCR\lnkfile\shell\%ue%ber" /ve /d "%Uue%bergeordneten Ordner %oe%ffnen" /f 2>nul >nul
if "%errorlevel%" EQU "1" goto :enderrorInstall
>> %log% echo ...
>> %log% echo Registry-Eintrag "HKCR\lnkfile\shell\über" wurde geschrieben
reg add "HKCR\lnkfile\shell\%ue%ber\command" /t REG_SZ /ve /d "%SystemRoot%\system32\wscript.exe \"%vbsFullName%\" \"%%1\"" /f 2>nul >nul
if "%errorlevel%" EQU "1" goto :enderrorInstall
>> %log% echo Registry-Eintrag "HKCR\lnkfile\shell\über\command" wurde geschrieben
echo ...
echo Ben%oe%tigte Registryeintr%ae%ge wurden erfolgreich geschrieben
goto :installend

:Uninstall
reg delete "HKCR\lnkfile\shell\%ue%ber" /f 2>nul >nul
if "%errorlevel%" EQU "1" set "errA=1"
rmdir %ProgramFiles%\Linkshell /s /q 2>nul >nul
if "%errorlevel%" EQU "1" set "errB=1"
if "%errB%" EQU "1" (
if "%errA%" EQU "1" (
goto :enderrorUninstall
))
echo.
echo Registry-Eintrag wurde erfolgreich gel%oe%scht
echo Dateien wurden erfolgreich gel%oe%scht
echo Verzeichnis wurde erfolgreich gel%oe%scht
goto :Uninstallend

::Endmeldungen
:NotInstall
echo.
echo Der Kontextmen%ue%eintrag wird nicht installiert
echo Sie k%oe%nnen den kontextmen%ue%eintrag sp%ae%ter installieren
echo Beliebige Taste zum Beenden dr%ue%cken
pause >nul
goto :eof
:NotUninstall
echo.
echo Die Option wird behalten
echo Sie k%oe%nnen den Kontextmen%ue%-Eintrag sp%ae%ter deinstallieren
echo Beliebige Taste zum Beenden dr%ue%cken
pause >nul
goto :eof

:Uninstallend
echo.
echo Deinstallation erfolgreich beendet
echo Beliebige Taste zum Beenden dr%ue%cken
pause >nul
goto :eof

:installend
echo.
echo.
echo Installation erfolgreich beendet
>> %log% echo ...
>> %log% echo Installation wurde erfolgreich beendet
echo Das Installationsverzeichnis wird beim Beenden ge%oe%ffnet
echo Beliebige Taste zum Beenden dr%ue%cken
pause >nul
start "Linkshell" "%ProgramFiles%\Linkshell"
ping -n 1 localhost >nul
goto :eof

::Mögliche Errormeldungen
:errleerins
echo.
echo !!Leere Eingabe!!
set /p "install=Bitte Eingabe wiederholen(Ja/Nein): "
if not defined install goto :errleer
goto :checkins
:errfalschins
echo.
echo !!Falsche Eingabe!!
set /p "install=Bitte Eingabe wiederholen(Ja/Nein): "
if not defined install goto :errfalsch
goto :checkins

:errleerunins
echo.
echo !!Leere Eingabe!!
set /p "uninstall=Bitte Eingabe wiederholen(Ja/Nein): "
if not defined uninstall goto :errleer
goto :checkunins
:errfalschunins
echo.
echo !!Falsche Eingabe!!
set /p "uninstall=Bitte Eingabe wiederholen(Ja/Nein): "
if not defined uninstall goto :errfalsch
goto :checkunins
:enderrorInstall
echo !!Fehler beim Schreiben in die Registry!!
echo Das Programm wird nun beendet
ping -n 3 localhost >nul
goto :eof
:enderrorUninstall
echo !!Fehler beim Deinstallieren!!
echo Das Programm wird nun beendet
ping -n 3 localhost >nul
goto :eof


Für Anregungen und Verbesserungsvorschläge bin ich offen.

LG Z33V
 
Ja, aber nur wenn du in einem Ordner warst, und dann in den vorherigen wechseln willst. Aber hiermit kannst du einen Rechtsklick auf eine VERKNÜPFUNG machen und dann in den Ordner wechseln, in dem sich die Verknüpfung befindet. Das ist der Sinn der ganzen Sache
 
Naja, das vbs-File is aber auch nich viel kleiner als meine Datei, und außerdem kann man meine Datei auch wieder deinstallieren ;)
und das steckt alles in einer Datei ;)

EDIT: Ja mein ich. Sorry
 
Zuletzt bearbeitet:
Zurück
Oben