zeroblue2005
Goto Top

Batch zum suchen und verschieben von Verknüpfungen

Hallo Zusammen,

ich muss verschiedene Rechner nach ganz bestimmten Datei-Verknüpfungen durchsuchen und diese dann verschieben! Das Ganze soll etwa so aussuchen:

1. Ermittel den Pfad des "Desktops Ordner" des angemeldeten Benutzer, auch wenn dieser nicht C:\User\Username\Desktop ist
2. Durchsuche den gefunden Desktoppfad nach "test.lnk"
3. Verschiebe die "test.lnk" nach Pfad ...

Da kommen noch ein oder zwei Zwischenschritte dazu, aber das bekomme ich hin. Nur das mit Desktoppfad ermitteln, bestimte Datei suchen und verschieben macht mir sorgen!

Hat da jemand was auf seiner Platte liegen?

Danke

Content-Key: 346455

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

Ausgedruckt am: 19.03.2024 um 07:03 Uhr

Mitglied: beidermachtvongreyscull
beidermachtvongreyscull 16.08.2017 aktualisiert um 15:21:18 Uhr
Goto Top
Zitat von @zeroblue2005:

Hallo Zusammen,
Hi

1. Ermittel den Pfad des "Desktops Ordner" des angemeldeten Benutzer, auch wenn dieser nicht C:\User\Username\Desktop ist

Worauf willst Du hinaus? Ordnerumleitung?

Da kommen noch ein oder zwei Zwischenschritte dazu, aber das bekomme ich hin. Nur das mit Desktoppfad ermitteln, bestimte Datei suchen und verschieben macht mir sorgen!

Probiere es mit %USERPROFILE%\Desktop
Oder mit %HOMEDRIVE%%HOMEPATH%\Desktop

Nachtrag:

Falls Du mit Ordnerumleitungen arbeitest, kannst Du mit reg query den Desktop auslesen:
https://support.microsoft.com/de-de/help/242557/registry-settings-for-fo ...
Mitglied: SeaStorm
SeaStorm 16.08.2017 um 15:24:00 Uhr
Goto Top
Bitte nicht dieses Registry gemurkse. Dafür gibt es ordentliche APIs


$strFileName="test.lnk"  
$strTargetFolder="c:\temp\"  


$strSourceFile=[Environment]::GetFolderPath("Desktop")+"\$strFileName"  
if (Test-Path $strSourceFile) {
Move-Item $strSourceFile $strTargetFolder
}}
Mitglied: beidermachtvongreyscull
beidermachtvongreyscull 16.08.2017 um 16:14:49 Uhr
Goto Top
Leider ist mein Powershell noch nichts, deswegen bin ich noch old school.
Mitglied: zeroblue2005
zeroblue2005 16.08.2017 um 19:23:23 Uhr
Goto Top
Ähhh das ist doch eine Powershell oder CMD? Beim ausführen mit einer Pause am Ende passiert nicht....

Ich bin da wohl auch eher Oldscool
Mitglied: zeroblue2005
zeroblue2005 16.08.2017 um 19:44:17 Uhr
Goto Top
Ach so bin euch noch eine Antwort schuldig...

Nein es geht nicht darum Ordner umzuleiten! Es geht darum das sich im Netzwerk bei den Usern verschiedene Verknüpfungen befinden. Diese sollen nun erfasst werden und dann in einem bestimmten anderen Ordner auf dem Desktop verschoben werden, also in diesem Ordner zusammengefasst werden!
s
Das dumme ist nur, dass die Benutzer verschiedene Systempfade haben für den Desktop. Die meisten haben natürlich C:\Benutzer\%username%\Desktop aber es gib auch einige die haben z.B. E:\%username%\Desktop oder anderes...

Deshalb wollte ich bei der Anmeldung der Benutzer über den NetLogon-Script folgendes erreichen:

1. Ermittel den Pfad des Desktop des Benutzers
2. kopiere aus einem bestimmten Pfad eien Ordner auf den ermittelten Desktop Pfad des Benutzers
3. Suche auf dem ermittelten Desktop nach bestimmten Verknüpfungen und verschiebe diese auf den zuvor kopierten Ordner!

Es geht also um eine automatisierte Aufräumaktion

Danke
Mitglied: SeaStorm
SeaStorm 16.08.2017 um 20:01:37 Uhr
Goto Top
Hi genau das tut das Script oben doch. Und ja es ist powershell
Mitglied: zeroblue2005
zeroblue2005 16.08.2017, aktualisiert am 17.08.2017 um 07:25:34 Uhr
Goto Top
Ich glaube ich habe die Lösung gefunden... was sagt Ihr?

@echo off
%Userprofile%
cd %Userprofile%\Desktop
for %%p in (test.lnk test1.ink) do move %%p  %Userprofile%\Desktop\test
Mitglied: zeroblue2005
zeroblue2005 16.08.2017 um 20:06:08 Uhr
Goto Top
Sorry aber ich bin echt noch nicht fit in Powershell halt Oldschool
Mitglied: zeroblue2005
zeroblue2005 17.08.2017 um 09:17:53 Uhr
Goto Top
OK, zu früh gefreut, dass ganze klappt nur dann, wenn %userprofile% oder %userhomedir$ auf C:\ liegt. Wenn die Ordner Desktop usw. umgeleitet sind, z.B. E:\%Userhomedir% usw. dann findet er mit den Umgebungsvariabelen den Pfad nicht...

Hat noch jemand eine Idee unter Batch?
Mitglied: SeaStorm
Lösung SeaStorm 17.08.2017 aktualisiert um 09:57:24 Uhr
Goto Top
Hi

meines Erachtens nach geht das Nativ unter Batch tatsächlich nur über Registry gemurkse.
Finde ich ganz hässlich, deshalb würde ich hier ein kleines vbs script Ran ziehen, das mir das sauber ausliest.

Also eine Datei findDesktop.vbs machen mit dem Code
set WshShell = WScript.CreateObject("WScript.Shell")  
strDesktop = WshShell.SpecialFolders("Desktop")  
wscript.echo(strDesktop)

und in deiner Batchdatei holst du dir dessen Ausgabe mit
FOR /F "usebackq delims=" %%i in (`cscript findDesktop.vbs`) DO SET DesktopFolder=%%i  

damit hast du dann in der Variable %DesktopFolder% den Pfad zum Desktop.

Und danach kaufst du dir ein Powershell Buch ;)
Mitglied: beidermachtvongreyscull
Lösung beidermachtvongreyscull 17.08.2017 aktualisiert um 10:09:04 Uhr
Goto Top
Ich habe wirklich den Eindruck, ich schreibe mich hier zu einem Idioten!

Du hast von mir oben einen Anhaltspunkt bekommen, mal in die Registry zu schauen.

In diesen Baum hier:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

Auch bei Ordnerumleitungen sollte hier der entsprechende Pfad für DESKTOP zu finden sein.
Prüf das mal nach.

https://stackoverflow.com/questions/10359001/how-to-read-a-reg-value-int ...

Ein one liner sollte reichen:

for /f "tokens=3" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /V Desktop ^|findstr /ri "REG_SZ"') do echo %%a

Dies ist ein Beispiel, wie der Registrywert ausgelesen und ausgegeben wird.
Du musst nur den hinteren Bereich ab "do" entsprechend anpassen.

Wenn Du den Befehl in der cmd erstmal testen willst ersetze %%a durch %a

Ich bin hier nun raus.
Mitglied: zeroblue2005
zeroblue2005 17.08.2017 um 11:07:23 Uhr
Goto Top
Sorry rege dich nicht auf, kann nicht jeder One Liner so aus den Finger saugen wie du....

Auf jeden Fall klappt dein One Liner, er liest den Pfad des Desktop aus!

Nun die Frage, und hau mir jetzt nicht in Gesicht face-wink wie sehen die weiteren Syntax aus, um mit dem ermittelten Pfad arbeiten zu können?

Beispiel:

Ich möchte eine neuen Ordner erstellen: mkdir in %%a usw.

Asche über mein Haupt....
Mitglied: zeroblue2005
zeroblue2005 18.08.2017 um 14:42:30 Uhr
Goto Top
Hmmm kann mir hier keiner mal einen Denkanstoss geben oder wo ich was finde, wo ich mir das selbst erarbeiten kann? face-smile
Mitglied: zeroblue2005
zeroblue2005 20.08.2017 aktualisiert um 18:12:21 Uhr
Goto Top
So ich habe mir jetzt meine eigene Lösung gebastelt. Aus einem Script den ich noch auf Lager hatte und nur angepasst werden musste. Die obigen Scripte sind super. Jedoch komme ich mit der Syntax einfach nicht ganz klar:

::Ermittel BS auf C:\Users nach Desktop des Users
for /f "delims=" %%a in ('dir /b /s /ad "C:\Users\%Username%" ^| findstr /iec:"Desktop"') DO (  

::Nachfolgende Anweisungen und Befehle
move "%%a\Test-Verknuepfung.lnk" "C:\Users\Public\Desktop\Test\"  
usw.
)


Ist das Home-DIR des Benutzers auf einem anderen Laufwerk, dann lässt man das Ganze wiederholen mit z.b: für HDD E:\...

::Ermittel BS auf E:\ nach Desktop des Users
for /f "delims=" %%a in ('dir /b /s /ad "E:\" ^| findstr /iec:"Desktop"') DO (  

Wenn der Desktop z.B. auf C:\ ist oder umgekehrt, dann wird die nachfolgende Suche bzw. Script ins leere laufen. Es passt nichts!