n1cknam3
Goto Top

Wallpaper bei Anmeldung per GPO zufällig ändern

Hallo,

ich hoffe ich habe bei der Suche keinen passenden Beitrag übersehen, wenn doch gebt mir bitte nen Hinweis darauf ;)

Wir suchen eine Möglichkeit per GPO oder Batch (oder wie auch immer) den Clients bei jeder Anmeldung oder einmal täglich zufällig ein Hintergrundbild aus einem Ordner zuzuweisen. Wir wollen, wenn möglich, einen Ordner anlegen in dem verschiedene Hintergrundbilder liegen (und auch mal welche hinzugefügt oder gelöscht werden) und aus diesem dann zufällig eines ausgewählt und dem User zugeteilt wird - dies sollte automatisch passieren.


Nun hatte Cheffin noch ne Idee:

in einem Ordner (bsp wallpaper) liegen viele Bilder, einmal am Tag sollte zB bild1.bmp in einen anderen Ordner verschoben werden und ein anderes Bild aus Ordner "wallpaper" soll den Dateinamen bild1.bmp erhalten - so dass halt jeden Tag ein anderes Bild den Namen bild1.bmp erhält.


Kennt jemand eine Möglichkeit eine von beiden Vorschlägen zu realisieren?


Vielen Dank

MfG

Content-Key: 130205

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

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

Member: Biber
Biber Nov 25, 2009 at 18:49:59 (UTC)
Goto Top
Moin N1ckNam3,

zumindest die Variante über Batch/Loginskript ist relativ stressarm realisierbar.

dazu wäre eigentlich nur die Funktion "Zufallszahl" etwas exotisch... aber die gibt es im CMD-Sprachumfang auch. heisst dort %random%.

Strategie wäre wie folgt (ich skizziere es nur am CMD-Prompt; bei mir mit Dateien *.txt statt *.bmp; das Prompt-Zeichen ">" nicht mit eingeben)

Schritt 1: Anzahl aller *.bmp-dateien ermitteln (bei mir *.txt) und in einer Variablen merken:
>for %i in (d:\temp\*.txt) do @set /a "allfiles+=1">nul

### optional/POC/Testabfrage
>set allfiles
allfiles=129
Schritt 2: Mit der ermittelten Anzahl %allfiles% eine Zufallszahl ermitteln mit 1<= Zufallszahl <= MaxAnzahl
>set /a "zufall=%random% % allfiles +1"
91
--> der Variableninhalt von %zufall% wird berechnet als %random% modulo 129 +1 --> also etwas zwischen (0....128) +1

Schritt 3:
jetzt holen wir aus der mit DIR /b erzeugten Liste aller 129 relevanten Dateien die Zeile mit dem Wert %zufall%, hier also die 91ste Datei der Auflistung
>for /f "tokens=2 delims=]" %i in ('dir /b d:\temp\*.txt^|find /n ".txt"^|find "[%zufall%]"') do @echo copy d:\temp\%i w:\hereever\wallpaper1.bmp
copy d:\temp\ipkrams.txt w:\hereever\wallpaper1.bmp
Sieht kompliziert aus... isses aber auch face-wink
ist zu lesen von der inneren Klammer der FOR /F-Anweisung aus, diese von links nach rechts, dann wieder vorne weiterlesen, zum Schluss den DO-Anweisungsteil.

--> Innere Klammer der FOR-Anweisung von Links nach rechts:
in ('dir /b d:\temp\*.txt^|find /n ".txt"^|find "[%zufall%]"') ....
Links gehts los... ...... dir /b d:\temp\*.txt ---> eine DIR -Anlistung aller *.txt-Dateien
......... ^|find /n ".txt".............--> wird übergeben an einer FIND /N Anweisung, die jede Zeile erwischt (finde "*.txt")
^|find "[%zufall%]" ') .......--> dieses Ergebnis wird übergeben an 'finde die Zeile mit Suchstring "[91]" '

jetzt vorn weiterlesen, was mit dieser Zeile gemacht werden soll:
for /f "tokens=2 delims=]" %i in (dieserEinenZeile) ... ---------> zerbrösele die Zeile an allen Trennzeichen "]", nimm den String NACH dem ersten Trennzeichen

jetzt den Anweisungsteil nach dem DO
do @echo copy d:\temp\%i w:\hereever\wallpaper1.bmp ---> mache ein "@echo copy" von dem zerbröselten Rest = Dateiname W:\hereever\"
---> bei dir natürlich zu ersetzen durch "DeinZielordner" statt "W:\hereEver\"

Soweit die Skizze zum Experimentieren und Verfeinern.
Im Batch jeweils zwei %-Zeichen vor den dynamischen / Zählvariablen ( %i, %j --> %%i, %%j )

Grüße
Biber
Member: N1ckNam3
N1ckNam3 Nov 26, 2009 at 11:00:30 (UTC)
Goto Top
Hallo,

vielen Dank für den Lösungsweg - ich werd mir den bei Gelegenheit mal zu Gemüte führen.

Hab gestern leider vergessen das Thema als gelöst zu markieren, da wir uns schon einen, wenn auch sehr einfachen aber wirksamen, Weg zusammengesucht hatten.


Ordner mit Bildern welche täglich gewechselt werden sollen (Bild 1.jpg wird per GPO den Clients zugewiesen) :

---> Bild 1.jpg wird vor Arbeitsbeginn verschoben:
move /Y \\server\Photoalbum\buf-desktops\Dezember\1.jpg \\server\Photoalbum\buf-desktops\Dezold\

---> Zufallszahl (0-31) wird ermittelt:
:random
set /a rand=%random% %%32


---> Wenn die ermittelte Zufallszahl nicht als Bildname existiert wird eine neue ermittelt:
if not exist \\server\Photoalbum\buf-desktops\Dezember\%rand%.jpg goto random

---> Bildname mit ermittelter existierender Zufallszahl wird in Bild 1.jpg umbenannt und somit von der GPO den Clients zugewiesen:
ren \\server\Photoalbum\buf-desktops\Dezember\%rand%.jpg 1.jpg


Ordner mit alten Bildern wird vorbereitet, damit nicht jeden Tag Bild 1.jpg überschrieben wird und somit verloren geht (Script wird vor dem oberen Script ausgeführt):

---> Datum wird ermittelt:
set t=%date%

---> Bild 1.jpg vom Vortag wird umbenannt
ren \\server\Photoalbum\buf-desktops\Dezold\1.jpg "%t%.jpg"


Nun wurden die Scripte in die Aufgabenplanung eingetragen (das 2. Script mit einer halben Stunde Vorsprung, damit die verschobenen Bilder nicht im Nirvana verschwinden) und morgens lange vor Arbeitsbeginn ausgeführt.

Hinweis: Cheffin wollte (zumindest für Dezember) extra Ordner für jeden Monat - wenn Sie dann aber jeden Monat Scripte und Aufgabenplanung anpassen muss, wird sie garantiert im Januar einen einzigen Ordner für die Aktion anlegen ;)


MfG Nick