highend01
Goto Top

Schnellzugriff - Defaulteinträge per Batch entfernen?

Hallo zusammen,

Im Windows Explorer werden auf der linken Seite per Default 4 Elemente unter "Schnellzugriff" angezeigt:
- Desktop
- Downloads
- Dokumente
- Bilder

Zusätzlich hinzugefügte Elemente landen ja als *.automaticDestinations-ms Datei unter
%APPDATA%\Microsoft\Windows\Recent\AutomaticDestinations

Die zusätzlichen loszuwerden ist ja kein Problem, aber...

Kennt jemand eine Lösung, wie man die 4 Defaulteinträge per Batch Datei (.cmd | .bat) entfernen kann?

Sie einzeln per Kontextmenü "Von Schnellzugriff lösen" ist hier keine sinnvolle Alternative...
Der Schnellzugriff soll auch nicht per Registryeintrag deaktiviert werden, es geht rein um eine automatisierte
Entfernung der Defaulteinträge.

Danke und Gruß,
Highend

Content-Key: 294909

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

Printed on: April 25, 2024 at 17:04 o'clock

Member: colinardo
Solution colinardo Feb 02, 2016 updated at 14:21:34 (UTC)
Goto Top
Hallo Highend,
machst du mit ein bisschen Hilfe der Powershell in einer Batch:
powershell -Executionpolicy ByPass -Command "(New-Object -Com Shell.Application).NameSpace('shell:::{679f85cb-0220-4080-b29b-5540cc05aab6}').Items() | %%{$_.Verbs()} | ?{$_.Name.replace('&','') -match 'Von Schnellzugriff l.sen|(Remove|Unpin) from Quick access'} | %%{$_.DoIt()}"  
Hinweis: Der Befehl ist für die Verwendung innerhalb einer Batch vorgesehen, wenn testweise er direkt in der CMD ausgeführt werden soll, muss das doppelte Prozentzeichen der Foreach-Schleife am Ende durch ein einfaches ersetzt werden.

Die pure Powershell-Version sieht so aus
(New-Object -Com Shell.Application).NameSpace('shell:::{679f85cb-0220-4080-b29b-5540cc05aab6}').Items() | %{$_.Verbs()} | ?{$_.Name.replace('&','') -match 'Von Schnellzugriff lösen|(Remove|Unpin) from Quick access'} | %{$_.DoIt()}  

Der Einzeiler ist für ein deutsches oder englisches System. Für andere Sprachen muss der Regex-String per Pipe-Symbol und dem entsprechenden String zum lösen des Schnellzugriffeintrags ergänzt werden.

Grüße Uwe
Member: Highend01
Highend01 Feb 02, 2016 at 13:14:53 (UTC)
Goto Top
Herzlichen Dank, Uwe!

Ich hab meine Batchdatei noch ein bisschen angepasst (da mit normaler 850er Codepage das "ö" in "Von Schnellzugriff lösen" Probleme machte) und jetzt klappt das Ganze hervorragend!

Liebe Grüße,
Highend
Member: colinardo
colinardo Feb 02, 2016 updated at 13:29:46 (UTC)
Goto Top
Zitat von @Highend01:
Herzlichen Dank, Uwe!
Gerne face-smile
Ich hab meine Batchdatei noch ein bisschen angepasst (da mit normaler 850er Codepage das "ö" in "Von Schnellzugriff lösen" Probleme machte) und jetzt klappt das Ganze hervorragend!
uups ... tatsächlich vergessen, ist oben korrigiert.

Grüße Uwe
Member: Highend01
Highend01 Feb 02, 2016 at 14:11:31 (UTC)
Goto Top
Uwe, eine Sache noch (falls du noch Zeit dafür hast):

Sollte man das Ganze zwei mal hintereinander ausführen (und sei es nur weil man sich verklickt hat), dann bekommt man beim zweiten Durchlauf:

Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In Zeile:1 Zeichen:119
+ ... Verbs() | ?{$_.Name.replace('&','') -match 'Von Schnellzugriff lösen| ...  
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) , RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull


Klar, es gibt ja nun keine Einträge mehr zu entfernen. Trotzdem, könnte man den Fehler abfangen und ohne Fehlermeldung fortfahren?
Member: colinardo
colinardo Feb 02, 2016 updated at 14:22:57 (UTC)
Goto Top
Zitat von @Highend01:
Uwe, eine Sache noch (falls du noch Zeit dafür hast):
Klar, es gibt ja nun keine Einträge mehr zu entfernen. Trotzdem, könnte man den Fehler abfangen und ohne Fehlermeldung fortfahren?
Ja klar, kein Problem, nur eine kleine Änderung, war ja nur ein Schnellschuss face-wink, ist oben angepasst.
Member: Highend01
Highend01 Feb 02, 2016 at 14:34:04 (UTC)
Goto Top
Supi, nun ist's perfekt face-smile
Member: joni2000de
joni2000de Jun 09, 2020 at 13:19:19 (UTC)
Goto Top
Hallo Uwe,
der Beitrag ist schon etwas her, stehe derzeit aber auch vor der Frage wie ich die Einträge loswerde. Wenn ich alle entfernen möchte, dann funktioniert das mit deinem Script super. Wie müsste ich aber tun wenn ich den Desktop stehen lassen möchte. Kann ich die Werte auch einzeln ansprechen?
Danke für deine Hilfe.
Gruß Joni
Member: colinardo
colinardo Jun 09, 2020 updated at 13:45:04 (UTC)
Goto Top
Servus Joni.
Zitat von @joni2000de:
Wenn ich alle entfernen möchte, dann funktioniert das mit deinem Script super. Wie müsste ich aber tun wenn ich den Desktop stehen lassen möchte. Kann ich die Werte auch einzeln ansprechen?
Ja, das ist kein Problem, du kannst die Einträge einfach mit einem Where-Objekt ausfiltern
Hier für die Verwendung in einer Batchdatei:
@echo off
powershell -Executionpolicy ByPass -Command "(New-Object -Com Shell.Application).NameSpace('shell:::{679f85cb-0220-4080-b29b-5540cc05aab6}').Items() | ? Name -notin 'Desktop' | %%{$_.Verbs()} | ?{$_.Name.replace('&','') -match 'Von Schnellzugriff l.sen|(Remove|Unpin) from Quick access'} | %%{$_.DoIt()}"  

Das ? Name -notin 'Desktop' kannst du auch um mehrere Elemente erweitern indem du diese als Array schreibst
? Name -notin 'Desktop','Anderer Name','Noch ein Name'
Alle Elemente im Array werden dann ignoriert, da der Operator -notin Verwendet wird.

Willst du dagegen nur bestimmte Elemente entfernen drehst du das ganze um und schreibst es so
? Name -in 'Desktop','Anderer Name','Noch ein Name'

Grüße Uwe
Member: joni2000de
joni2000de Jun 09, 2020 at 13:59:15 (UTC)
Goto Top
Hallo Uwe,
du bist super. So schnell geholfen, echt perfekt.
Da ich jetzt schon den kleinen Finger habe, vielleicht gibst du mir auch noch die ganze Hand face-smile.
Ich würde jetzt nicht nur die ungebrauchten Einträge gerne entfernen sondern auch noch spezifische Einträge hinzufügen. Der Pfad ist aber pro User unterschiedlich so in der Art P:\Scanordner\Username.
Geht das auch?
Nochmal danke für deine Hilfe!
Gruß Joni
Member: colinardo
colinardo Jun 09, 2020 updated at 14:12:39 (UTC)
Goto Top
Der Pfad ist aber pro User unterschiedlich so in der Art P:\Scanordner\Username.
Auch das ist kein Hexenwerk, für das "Username" in deinem Pfad habe ich jetzt mal den aktuellen angemeldeten Usernamen als Variable eingesetzt.
@echo off
powershell -Executionpolicy ByPass -Command "(New-Object -Com Shell.Application).NameSpace('P:\Scanordner').ParseName($env:Username).Verbs() | ?{$_.Name -match 'An Schnellzugriff anheften|Pin to Quick Access'} | %%{$_.Doit()}"  
Grüße Uwe
Member: joni2000de
joni2000de Jun 09, 2020 at 17:30:44 (UTC)
Goto Top
Nochmal danke. Hat wie gewünscht funktioniert.

Und die Variante mit dem fixen Pfad ohne Variable habe ich dann auch noch hin bekommen.
Shell.Application).NameSpace('P:\Scanordner').ParseName('Public').Verbs()

Somit hast du unseren Usern einiges an Handarbeit erspart.

Merci

Gruß Joni
Member: TomFire
TomFire Jun 21, 2022 at 06:08:58 (UTC)
Goto Top
Hallo Uwe Danke für deine Hilfen die sind genial.
Kannst du mir auch noch erklären wie ich einen speziellen Ordner c:\XY\AB\Wunschordner an den Schnellzugriff anheften kann?
Gruß Thomas
Member: colinardo
colinardo Jun 21, 2022 updated at 08:10:28 (UTC)
Goto Top
Servus Thomas.
Zitat von @TomFire:
Kannst du mir auch noch erklären wie ich einen speziellen Ordner c:\XY\AB\Wunschordner an den Schnellzugriff anheften kann?
Schau in den Kommentar über deinem, schon weist du wie face-wink.
@echo off
set "folder=c:\XY\AB\Wunschordner"  
powershell -Executionpolicy ByPass -Command "$f = gi '%folder%';(New-Object -Com Shell.Application).NameSpace($f.Parent.Fullname).ParseName($f.Name).Verbs() | ?{$_.Name -match 'An Schnellzugriff anheften|Pin to Quick Access'} | %%{$_.Doit()}"  

Grüße Uwe
Member: TomFire
TomFire Jun 21, 2022 at 08:50:52 (UTC)
Goto Top
Top Danke
manchmal is man vor lauter lesen blind XD
Member: TomFire
TomFire Jun 28, 2022 at 05:52:58 (UTC)
Goto Top
Hallo Uwe

gibt es auch eine Einzeiler Variante in der ich mehrere Ordner anheften kann?
set "folder1=..."
set "folder2=..."

oder muss ich da die Zeile mehr mal aufrufen mit jeweils dem anderen Folder?

Danke schon mal face-smile
gruß
Thomas
Member: colinardo
colinardo Jun 28, 2022 updated at 07:51:48 (UTC)
Goto Top
Zitat von @TomFire:
gibt es auch eine Einzeiler Variante in der ich mehrere Ordner anheften kann?
set "folder1=..."
set "folder2=..."
@echo off
powershell -Executionpolicy ByPass -Command "Get-Item -Path 'c:\ordner1','c:\ordner2' | %%{(New-Object -Com Shell.Application).NameSpace($_.Parent.Fullname).ParseName($_.Name).Verbs() | ?{$_.Name -match 'An Schnellzugriff anheften|Pin to Quick Access'} | %%{$_.Doit()}}"  
Grüße Uwe
Member: TomFire
TomFire Jun 28, 2022 at 07:58:25 (UTC)
Goto Top
funktioniert einwandfrei Vielen Dank Uwe face-smile