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-ID: 294909

Url: https://administrator.de/forum/schnellzugriff-defaulteintraege-per-batch-entfernen-294909.html

Ausgedruckt am: 23.12.2024 um 11:12 Uhr

colinardo
Lösung colinardo 02.02.2016 aktualisiert um 15:21:34 Uhr
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
Highend01
Highend01 02.02.2016 um 14:14:53 Uhr
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
colinardo
colinardo 02.02.2016 aktualisiert um 14:29:46 Uhr
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
Highend01
Highend01 02.02.2016 um 15:11:31 Uhr
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?
colinardo
colinardo 02.02.2016 aktualisiert um 15:22:57 Uhr
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.
Highend01
Highend01 02.02.2016 um 15:34:04 Uhr
Goto Top
Supi, nun ist's perfekt face-smile
joni2000de
joni2000de 09.06.2020 um 15:19:19 Uhr
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
colinardo
colinardo 09.06.2020 aktualisiert um 15:45:04 Uhr
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
joni2000de
joni2000de 09.06.2020 um 15:59:15 Uhr
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
colinardo
colinardo 09.06.2020 aktualisiert um 16:12:39 Uhr
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
joni2000de
joni2000de 09.06.2020 um 19:30:44 Uhr
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
TomFire
TomFire 21.06.2022 um 08:08:58 Uhr
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
colinardo
colinardo 21.06.2022 aktualisiert um 10:10:28 Uhr
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
TomFire
TomFire 21.06.2022 um 10:50:52 Uhr
Goto Top
Top Danke
manchmal is man vor lauter lesen blind XD
TomFire
TomFire 28.06.2022 um 07:52:58 Uhr
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
colinardo
colinardo 28.06.2022 aktualisiert um 09:51:48 Uhr
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
TomFire
TomFire 28.06.2022 um 09:58:25 Uhr
Goto Top
funktioniert einwandfrei Vielen Dank Uwe face-smile