Background Switcher - BATCH
Hilfe zur Programmierung erwünscht.
Hallo Leute!
vielen Dank für dieses tolle Forum!!
Mein Problem...
Hintergrund:
Ich bin schon wieder einige Stunden damit beschäftigt, den Laptop meiner werten Mutti etwas mehr zu automatisieren.
Um meine Idee umsetzen zu können, benötige ich die Funktion, per Batch den Hintergrund zu wechseln, dafür erschließen sich mehrere Möglichkeiten.
Einfach Programm aus dem Internet nutzen? - Will ich nicht! - Warum:
Dies lässt sich mit zwar mit externen Programmen realisieren, jedoch fehlt mir darin einfach die Transparenz, da solche Programme nicht OpenSource sind und ich mich bzw. meine Mutti 1. Performancemässig im Nachteil sehe, außerdem 2. Die Sicherheit fehlt, dass das Programm keinen Quatsch anstellt (Ala unnötige Registry-/Dll-/Treiber-Einträge o. ä.). - Das System soll ABSOLUT SAUBER vor solchem Quatsch bleiben, deswegen kommen auch nur die nötigsten und sinnvollsten Programme auf diesen Rechner.
Ich bitte diesbezüglich keine Diskussion anzufangen, ich möchte schließlich einen Lösungsweg zu meinem Problem der Realisierung dieser Idee (Das selbstständige Programmieren/Scripten einer solchen Dienstleistung) und nicht des (nichtvorhandenen Problemes) der "Nicht-Einsicht" bzw. der Nichtakzeptierung fremder Software. - Sofern das jemand annehmen sollte. - Ich möchte nicht diskutieren wie sinnvoll es ist, denn das ist es für mich.
- Gebe ich nur deswegen an, da in vielen Foren diskutiert wird warum und wie sehr man etwas möchte -
Meine Realisierungsidee:
Ich wollte das ganze nun per BATCH-Script realisieren, konnte schon einen Lösungsweg erarbeiten:
Bei einem Neustart war dann einfach ein anderer Hintergrund zu sehen ;) - Das Script lief beim Autostart durch.
--- Alter (funktionsfähiger) Code:
Leider ist dieser Lösungsweg nicht optimal, da ich das Gefühl habe, das Script wähle die Bildschirmhintergründe zu "unzufällig" und zu häufig wiederholend die selben Hintergrundbilder aus.
Was das aktuelle Script konkret tun soll:
1. Anstatt einem Registry Eintrag, ersetzt es die als Hintergrundgrafik gesetzte .jpg Datei, indem es als solche benannt in das entsprechende Verzeichnis kopiert wird. - Soweit kein Problem
2. Nun soll die gerade ausgewählte Grafik in einen anderen Ordner verschoben werden, damit diese bei den nächsten Starts nicht wieder ausgewählt werden kann. - Soweit kein Problem
3. Jetzt aber, soll wenn ALLE Hintergrundbilder in den neuen Ordner verschoben wurden, sprich wenn der Wallpaper-Pool leer ist, alle Wallpaper wieder in den Pool verschoben werden. - Das ist das Problem. [EDIT: AKTUALISIERT] Wo und wie mache ich das? Meine Versuche haben nicht geklappt, habe sie deshalb aus dem Code gelöscht.
---Der Code dazu lautet:
[/EDIT]
Wie Ihr sicher schon herausgelesen habt - besonders viel Erfahrung in VBS oder BATCH habe ich nicht, dennoch gebe ich mir alle Mühe.
Das einzige was ich relativ gut kenne ist LSL (Linden Scripting Language) und HTML.
Wie also könnte ich es noch realisieren?
Kann ich etwas besser machen (Fehler)?
Konstruktive Kritik oder Verbesserungsvorschläge sind herzlichst erwünscht.
Mit lieben Gruß
Der Registrar
Hallo Leute!
vielen Dank für dieses tolle Forum!!
Mein Problem...
Hintergrund:
Ich bin schon wieder einige Stunden damit beschäftigt, den Laptop meiner werten Mutti etwas mehr zu automatisieren.
Um meine Idee umsetzen zu können, benötige ich die Funktion, per Batch den Hintergrund zu wechseln, dafür erschließen sich mehrere Möglichkeiten.
Einfach Programm aus dem Internet nutzen? - Will ich nicht! - Warum:
Dies lässt sich mit zwar mit externen Programmen realisieren, jedoch fehlt mir darin einfach die Transparenz, da solche Programme nicht OpenSource sind und ich mich bzw. meine Mutti 1. Performancemässig im Nachteil sehe, außerdem 2. Die Sicherheit fehlt, dass das Programm keinen Quatsch anstellt (Ala unnötige Registry-/Dll-/Treiber-Einträge o. ä.). - Das System soll ABSOLUT SAUBER vor solchem Quatsch bleiben, deswegen kommen auch nur die nötigsten und sinnvollsten Programme auf diesen Rechner.
Ich bitte diesbezüglich keine Diskussion anzufangen, ich möchte schließlich einen Lösungsweg zu meinem Problem der Realisierung dieser Idee (Das selbstständige Programmieren/Scripten einer solchen Dienstleistung) und nicht des (nichtvorhandenen Problemes) der "Nicht-Einsicht" bzw. der Nichtakzeptierung fremder Software. - Sofern das jemand annehmen sollte. - Ich möchte nicht diskutieren wie sinnvoll es ist, denn das ist es für mich.
- Gebe ich nur deswegen an, da in vielen Foren diskutiert wird warum und wie sehr man etwas möchte -
Meine Realisierungsidee:
Ich wollte das ganze nun per BATCH-Script realisieren, konnte schon einen Lösungsweg erarbeiten:
Bei einem Neustart war dann einfach ein anderer Hintergrund zu sehen ;) - Das Script lief beim Autostart durch.
--- Alter (funktionsfähiger) Code:
@echo off
setlocal enabledelayedexpansion
dir /b "*.jpg" /s |find /c /v "" > count.txt
Set /P _count=<count.txt
del count.txt
echo Count:%_count%
Set /a Number=(%Random% %%(%_count%))+1
set /a c=0
echo Choose:%Number%
FOR /F "tokens=* delims=, " %%G in ('dir /b /s *.jpg') DO (
rem echo TRY:%%G
set /a c+=1
if [!c!]==[!Number!] ( set file="%%G"
goto :change ) )
:change
echo %file%
echo return
reg add "HKCU\Control Panel\Desktop" /v "Wallpaper" /d "%file%" /t REG_SZ /f
Leider ist dieser Lösungsweg nicht optimal, da ich das Gefühl habe, das Script wähle die Bildschirmhintergründe zu "unzufällig" und zu häufig wiederholend die selben Hintergrundbilder aus.
Was das aktuelle Script konkret tun soll:
1. Anstatt einem Registry Eintrag, ersetzt es die als Hintergrundgrafik gesetzte .jpg Datei, indem es als solche benannt in das entsprechende Verzeichnis kopiert wird. - Soweit kein Problem
2. Nun soll die gerade ausgewählte Grafik in einen anderen Ordner verschoben werden, damit diese bei den nächsten Starts nicht wieder ausgewählt werden kann. - Soweit kein Problem
3. Jetzt aber, soll wenn ALLE Hintergrundbilder in den neuen Ordner verschoben wurden, sprich wenn der Wallpaper-Pool leer ist, alle Wallpaper wieder in den Pool verschoben werden. - Das ist das Problem. [EDIT: AKTUALISIERT] Wo und wie mache ich das? Meine Versuche haben nicht geklappt, habe sie deshalb aus dem Code gelöscht.
---Der Code dazu lautet:
:start
setlocal enabledelayedexpansion
dir /b "C:\Users\User\Pictures\Wallpaper\WallpaperChanger\WallpapersPool\*.jpg" /s |find /c /v "" > count.txt
Set /P _count=<count.txt
del count.txt
echo Count:%_count%
Set /a Number=(%Random% %%(%_count%))+1
set /a c=0
:chose
FOR /F "tokens=* delims=, " %%G in ('dir /b "C:\Users\User\Pictures\Wallpaper\WallpaperChanger\WallpapersPool\*.jpg"') DO (
rem echo TRY:%%G
set /a e+=1
if [!e!]==[!Number!] ( set fname="%%G"
goto :change ) )
:change
echo %file%
del "C:\Users\User\Pictures\Wallpaper\WallpaperChanger\WallpapersActive\Background.jpg"
copy C:\Users\User\Pictures\Wallpaper\WallpaperChanger\WallpapersPool\%fname% C:\Users\User\Pictures\Wallpaper\WallpaperChanger\WallpaperActive\Background.jpg
move C:\Users\User\Pictures\Wallpaper\WallpaperChanger\WallpapersPool\%fname% C:\Users\User\Pictures\Wallpaper\WallpaperChanger\WallpapersUsed\%fname%
[/EDIT]
Wie Ihr sicher schon herausgelesen habt - besonders viel Erfahrung in VBS oder BATCH habe ich nicht, dennoch gebe ich mir alle Mühe.
Das einzige was ich relativ gut kenne ist LSL (Linden Scripting Language) und HTML.
Wie also könnte ich es noch realisieren?
Kann ich etwas besser machen (Fehler)?
Konstruktive Kritik oder Verbesserungsvorschläge sind herzlichst erwünscht.
Mit lieben Gruß
Der Registrar
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 159503
Url: https://administrator.de/forum/background-switcher-batch-159503.html
Ausgedruckt am: 22.04.2025 um 20:04 Uhr
9 Kommentare
Neuester Kommentar

Salü,
kleine Gegenfrage - wieviele Bilder sind denn in dem Ordner?
Gruß
kleine Gegenfrage - wieviele Bilder sind denn in dem Ordner?
Gruß

Servus,
ungetestet und außer einer Variablen nur eine Abfrage gezimmert, die sicherstellt, dassdie Badewanne der Pool wieder gefüllt wird.
Bei 173 Dateien wirds mit dem Zufall halt sehr Zufällig, daher ist das mit derm Verschieben eine passable Idee.
Gruß
ungetestet und außer einer Variablen nur eine Abfrage gezimmert, die sicherstellt, dass
:start
setlocal enabledelayedexpansion
set Pool="C:\Users\User\Pictures\Wallpaper\WallpaperChanger"
dir /b "%Pool%\WallpapersPool\*.jpg" /s |find /c /v "" > count.txt
Set /P _count=<count.txt
del count.txt
echo Count:%_count%
Set /a Number=(%Random% %%(%_count%))+1
set /a c=0
:chose
FOR /F "tokens=* delims=, " %%G in ('dir /b "%Pool%\WallpapersPool\*.jpg"') DO (
rem echo TRY:%%G
set /a e+=1
if [!e!]==[!Number!] ( set fname="%%G"
goto :change ) )
:change
echo %file%
del "%Pool%\WallpapersActive\Background.jpg"
copy %Pool%\WallpapersPool\%fname% %Pool%\WallpaperActive\Background.jpg
move %Pool%\WallpapersPool\%fname% %Pool%\WallpapersUsed\%fname%
for /f %%z in ('dir %Pool%\WallpapersPool\*.jpg ^|find "Datei(en)"') do if %%z leq 1 move %Pool%\WallpapersUsed\*.jpg %Pool%\WallpapersPool\
Bei 173 Dateien wirds mit dem Zufall halt sehr Zufällig, daher ist das mit derm Verschieben eine passable Idee.
Gruß
... und noch etwas eingedampft (sowie getestet
):
Grüße
bastla
P.S.: Beim verwendeten BS handelt es sich wohl um Vista - 7 bräuchte ja noch nicht mal diesen Batch (siehe etwa hier) ...
@echo off & setlocal
set "Pool=C:\Users\User\Pictures\Wallpaper\WallpaperChanger"
if not exist "%Pool%\WallpapersPool\*.jpg" move "%Pool%\WallpapersUsed\*.jpg" "%Pool%\WallpapersPool\" >nul
for /f %%i in ('dir "%Pool%\WallpapersPool\*.jpg"^|findstr "Datei(en)"') do set _count=%%i
echo Count:%_count%
set /a Number=(%Random% %% %_count%)+1
:chose
for /f "tokens=1* delims=:" %%g in ('dir /b "%Pool%\WallpapersPool\*.jpg" 2^>nul^|findstr /n "^" ^|findstr /b "%Number%:"') do set "fname=%%h"
:change
echo %fname%
copy "%Pool%\WallpapersPool\%fname%" "%Pool%\WallpaperActive\Background.jpg" >nul
move "%Pool%\WallpapersPool\%fname%" "%Pool%\WallpapersUsed\"
bastla
P.S.: Beim verwendeten BS handelt es sich wohl um Vista - 7 bräuchte ja noch nicht mal diesen Batch (siehe etwa hier) ...
Hallo DerRegistrar, und ein nachträgliches Willkommen im Forum!
Damit's vielleicht etwas verständlicher wird:
- falls Du an der Kommandozeile testen willst:
- listet alle *.jpg-Dateien auf, nummeriert diese (es wird nach "^" = Zeilenanfang gesucht, und den hat jede Zeile, womit also alle Dateien erfasst werden) und danach jene Zeile = Datei ermittelt, deren Nummer mit der vorher festgelegten %Number% übereinstimmt.
Da letztlich nur der Dateiname, nicht aber auch die laufende Nummer benötigt wird, erfolgt eine Unterteilung der Zeile (per "
Grüße
bastla
KOMPLIZIERT!!!
kann sich ja eigentlich nur auf diese Zeile beziehen (den Rest hattest Du ja bereits in ähnlicher Form):for /f "tokens=1* delims=:" %%g in ('dir /b "%Pool%\WallpapersPool\*.jpg" 2^>nul^|findstr /n "^" ^|findstr /b "%Number%:"') do set "fname=%%h"
dir /b "%Pool%\WallpapersPool\*.jpg" 2^>nul^|findstr /n "^" ^|findstr /b "%Number%:"
dir /b "%Pool%\WallpapersPool\*.jpg" 2>nul|findstr /n "^"|findstr /b "%Number%:"
Da letztlich nur der Dateiname, nicht aber auch die laufende Nummer benötigt wird, erfolgt eine Unterteilung der Zeile (per "
for /f
") anhand des auf die Nummer folgenden Doppelpunktes: der Teil davor wird %%g, der Teil danach %%h - and that's all ...Grüße
bastla
Moin Registrar,
willkommen im Forum.
Ich bin sehr angetan von deiner Art des Fragestellens und der Sorgfalt und Mühe, die du dir gibst.
Natürlich ebenso angetan von den hochkarätigen Antworten und der schnellen Lösung.
Deshalb habe ich auch mal -was nicht jede Woche vorkommt- einen "Anspruchsvoll-Smiley" für angemessen erhalten.
Danke für diesen Beitrag an alle.
Grüße
Biber
P.S. Dein "finaler Code" ist doch eigentlich erhaltenswert und wiederverwendbar ....
...vielleicht solltest du noch ein paar Kommentarzeilen einfügen, falls deine Mutti da mal reinguckt.
Das nackte und unkommentierte Endergebnis dieser Diskussion wirst vermutlich auch du in 3 Monaten nicht mehr auf Anhieb nachvollziehen können.
P.P.S. Die eine oder andere Kommentierung könnte jetzt von bastlaszeitgleichem wieder mal schnelleren Kommentar 26.01.2011, 21:11:34 Uhr übernommen werden 
willkommen im Forum.
Ich bin sehr angetan von deiner Art des Fragestellens und der Sorgfalt und Mühe, die du dir gibst.
Natürlich ebenso angetan von den hochkarätigen Antworten und der schnellen Lösung.
Deshalb habe ich auch mal -was nicht jede Woche vorkommt- einen "Anspruchsvoll-Smiley" für angemessen erhalten.
Danke für diesen Beitrag an alle.
Grüße
Biber
P.S. Dein "finaler Code" ist doch eigentlich erhaltenswert und wiederverwendbar ....
...vielleicht solltest du noch ein paar Kommentarzeilen einfügen, falls deine Mutti da mal reinguckt.
Das nackte und unkommentierte Endergebnis dieser Diskussion wirst vermutlich auch du in 3 Monaten nicht mehr auf Anhieb nachvollziehen können.
P.P.S. Die eine oder andere Kommentierung könnte jetzt von bastlas