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

Printed on: April 26, 2024 at 13:04 o'clock

Member: beidermachtvongreyscull
beidermachtvongreyscull Aug 16, 2017 updated at 13:21:18 (UTC)
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 ...
Member: SeaStorm
SeaStorm Aug 16, 2017 at 13:24:00 (UTC)
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
}}
Member: beidermachtvongreyscull
beidermachtvongreyscull Aug 16, 2017 at 14:14:49 (UTC)
Goto Top
Leider ist mein Powershell noch nichts, deswegen bin ich noch old school.
Member: zeroblue2005
zeroblue2005 Aug 16, 2017 at 17:23:23 (UTC)
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
Member: zeroblue2005
zeroblue2005 Aug 16, 2017 at 17:44:17 (UTC)
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
Member: SeaStorm
SeaStorm Aug 16, 2017 at 18:01:37 (UTC)
Goto Top
Hi genau das tut das Script oben doch. Und ja es ist powershell
Member: zeroblue2005
zeroblue2005 Aug 16, 2017, updated at Aug 17, 2017 at 05:25:34 (UTC)
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
Member: zeroblue2005
zeroblue2005 Aug 16, 2017 at 18:06:08 (UTC)
Goto Top
Sorry aber ich bin echt noch nicht fit in Powershell halt Oldschool
Member: zeroblue2005
zeroblue2005 Aug 17, 2017 at 07:17:53 (UTC)
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?
Member: SeaStorm
Solution SeaStorm Aug 17, 2017 updated at 07:57:24 (UTC)
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 ;)
Member: beidermachtvongreyscull
Solution beidermachtvongreyscull Aug 17, 2017 updated at 08:09:04 (UTC)
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.
Member: zeroblue2005
zeroblue2005 Aug 17, 2017 at 09:07:23 (UTC)
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....
Member: zeroblue2005
zeroblue2005 Aug 18, 2017 at 12:42:30 (UTC)
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
Member: zeroblue2005
zeroblue2005 Aug 20, 2017 updated at 16:12:21 (UTC)
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!