Gibt es keine arrays in Batch ? anderre möglichkeit ?
Nabend , habe mich gerade hier bei euch neu angemeldet !
Also, ich habe folgendes vor:
Ich möchte eine Bacht-Datei Proggen die den Wert in der Registry, welche den Pfad zum Hintergrundbild speichert, ändert.
Ob beim Hoch- oder Runterfahren spielt eigendlich keine Rolle ( denke ich ;) ).
Mit dem erstellen, löschen und ändern von Registrywerten habe ich mich schon auseinander gesetzt, habe das nämlich für schwieriger gehalten.
Mit einwenig googeln und ein paar Beiträgen aus diesem Forum habe ich das recht schnell hinbekommen.
Aber Probleme habe ich jetzt mit der zufälligen Auswahl des Hintergrundbildes !
Wie "speicher" ich denn den Pfad eines neuen Bildes in einem Array bzw. wie erstelle ich ein Array ?
Da ich über Arrays nix gefunden habe, habe ich jeden Pfad zum Bild in einer Variablen gespeichert (WALLPAPER[1], WALLPAPER[2], WALLPAPER[3])
Mit
erzeuge ich eine Zufallszahl zwischen 1 und %WALLPAPERS%=3
Nun wollte ich wie in gewohnterweise (PHP/Perl) mit %WALLPAPER[%NUM%]% auf den Pfad des neuen Hintergrundbildes zugreifen bzw. ihn ersteinmal mit echo ausgeben aber das funktioniert nicht. Mir war auch fast sofort klar warum nicht. Weill Batch das nun so liest:
Variable1: %WALLPAPER[%
string:NUM
Variable2:%]%
Tja, und diese beiden Variablen existieren nun mal nicht. Und so war die erhoffte Ausgabe des BildPfades nur "NUM".
Wie komme ich den jetzt an den richtigen BildPfad ?
Mit festen IFs oder SWITCHs will ich das nicht machen, denn ich möchte hinterher leicht und bequem (wie man nun mal ist) neue Bilder hinzu bzw. alte entfernen können, ohen erst ein paar IFs oder CASEs zu löschen bzw. hinzuzufügen.
Hoffe Ihr könnt mir Neuling in sachen Batch da helfen
Vieleicht gibt es ja auch einen anderren Weg ?
Schon jetzt ein Danke fürs lesen.
MFG
dragonl
Hier nach mal den Code den ich bis jetzt habe, ohne Registry:
Also, ich habe folgendes vor:
Ich möchte eine Bacht-Datei Proggen die den Wert in der Registry, welche den Pfad zum Hintergrundbild speichert, ändert.
Ob beim Hoch- oder Runterfahren spielt eigendlich keine Rolle ( denke ich ;) ).
Mit dem erstellen, löschen und ändern von Registrywerten habe ich mich schon auseinander gesetzt, habe das nämlich für schwieriger gehalten.
Mit einwenig googeln und ein paar Beiträgen aus diesem Forum habe ich das recht schnell hinbekommen.
Aber Probleme habe ich jetzt mit der zufälligen Auswahl des Hintergrundbildes !
Wie "speicher" ich denn den Pfad eines neuen Bildes in einem Array bzw. wie erstelle ich ein Array ?
Da ich über Arrays nix gefunden habe, habe ich jeden Pfad zum Bild in einer Variablen gespeichert (WALLPAPER[1], WALLPAPER[2], WALLPAPER[3])
Mit
set /a NUM=1+%WALLPAPERS%*%random%/32768
Nun wollte ich wie in gewohnterweise (PHP/Perl) mit %WALLPAPER[%NUM%]% auf den Pfad des neuen Hintergrundbildes zugreifen bzw. ihn ersteinmal mit echo ausgeben aber das funktioniert nicht. Mir war auch fast sofort klar warum nicht. Weill Batch das nun so liest:
Variable1: %WALLPAPER[%
string:NUM
Variable2:%]%
Tja, und diese beiden Variablen existieren nun mal nicht. Und so war die erhoffte Ausgabe des BildPfades nur "NUM".
Wie komme ich den jetzt an den richtigen BildPfad ?
Mit festen IFs oder SWITCHs will ich das nicht machen, denn ich möchte hinterher leicht und bequem (wie man nun mal ist) neue Bilder hinzu bzw. alte entfernen können, ohen erst ein paar IFs oder CASEs zu löschen bzw. hinzuzufügen.
Hoffe Ihr könnt mir Neuling in sachen Batch da helfen
Vieleicht gibt es ja auch einen anderren Weg ?
Schon jetzt ein Danke fürs lesen.
MFG
dragonl
Hier nach mal den Code den ich bis jetzt habe, ohne Registry:
@echo off
title ADHW - Automatik Desktop Hintergrundbild Wechsler
color 74
REM -------------------------------- Einstellungen ---------------------------------
REM ---Hier werden die Hintergrundbilder definiert.
REM ---Für jedes Bild eine Variable "WALLPAPER[x]"
REM ---"WALLPAPERS" enthält die gesamtzahl der definierten Hintergrundbildern.
set WALLPAPER[1]="C:\Dokumente und Einstellungen\All User\Eigene Bilder\Background1.jpg"
set WALLPAPER[2]="C:\Dokumente und Einstellungen\All User\Eigene Bilder\Background2.jpg"
set WALLPAPER[3]="C:\Dokumente und Einstellungen\All User\Eigene Bilder\Background3.jpg"
set WALLPAPERS=3
REM ----------------------------------- Programm -----------------------------------
echo.
echo ------------ ADHW - Automatik Desktop Hintergrundbild Wechsler ----------------
echo.
REM ---Definiert Variable "NUM" mit einer zufallszahl zwischen 1 und "%WALLPAPER%"
set /a NUM=1+%WALLPAPERS%*%random%/32768
set NEWWP=WALLPAPER[%NUM%]
echo NEWWP=%NEWWP%
echo.
echo -WALLPAPER[%NUM%]
echo -%WALLPAPER[NUM]%
echo -%WALLPAPER[%NUM%]%
echo -%WALLPAPER[%%NUM%%]%
echo -%%WALLPAPER[%NUM%]%%
echo -%%WALLPAPER[%%NUM%%]%%
echo -
echo -
echo -
echo -
echo -%WALLPAPER[2]%
REM ---Nur mit dem letztem echo bekomme ich bis jetzt den Pfad zum Bild,
REM ---aber hier habe ich die 2 manuel gewählt und das soll ja der zufall entscheiden.
echo.
echo ------------ ADHW - Automatik Desktop Hintergrundbild Wechsler ----------------
echo.
pause
exit
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 20188
Url: https://administrator.de/contentid/20188
Ausgedruckt am: 15.11.2024 um 11:11 Uhr
5 Kommentare
Neuester Kommentar
Moin dragonl,
willkommen im Forum.
Als ich angefangen habe zu lesen "Ich möchte eine Bacht-Datei Proggen die.." hatte ich den Maus-Cursor schon fast auf diesem "X".. ..
..aber Du hast Dich schnell gesteigert in der Ausdrucksweise. Ist grade ein heikles Thema hier im Forum, weil einige hier die letzten Wochen ihre Fragen so formuliert haben wie sie auch mit ihrem Bewährungshelfer sprechen.. egal - back to thread.
Arrays gibt es tatsächlich nicht im Batch - soweit die schlechte Nachricht.
Die gute Nachricht: Sind auch nicht nötig, da in der CMD-Shell Variablen in Variablennamen erlaubt sind bzw. aufgelöst werden.
Beispiel am CMD-Prompt:
Um allerdings jetzt einen Variablennamen "var1" zusammenbasteln will aus "var"+"1", ist die Syntax ein bissl strange... da ich dem CMD-Interpreter sagen muss, welche Variablen er zuerst und welche teil-aufgelösten er danach auflösen soll, haben die drei Weisen von M$ die "EnableDelayedExpansion" eingeführt. Siehe die Hilfe unter "set /?" am Prompt. Oder in den neueren Tutorials im Bereich "Batch & Shell".
Insbesondere unter "SetLocal EnableDelayedExpansion".
Kurzskizze DelayedExpansion:
CMD-Variablen werden erkannt, wenn sie eingeschlossen sind in %-Zeichen (%var%).
Eine Variable, die erst delayed aufgelöst werden soll, weil sie noch einen inneren "variablen" Teil hat,
wird in "!"-Zeichen statt in "%"-Zeichen geschrieben.
*grummel... bin kein guter Erklärer.. ich zeigs Dir:
~~~~~~~~~
(((((( Klammer auf....
Wenn es Dir lieber ist, kannst Du natürlich auch Variablen definieren, die so heißen:
Set var1[1]=test
...aber dann ist "var1[1]" ein Variablenname, kein Array-Element. ))))))))) Klammer zu
~~~~~~~~~~
Der langen Rede kurzer Sinn: Wenn Du Deine Zeilen so lässt, ware eine Lösung so:
HTH Biber
willkommen im Forum.
Als ich angefangen habe zu lesen "Ich möchte eine Bacht-Datei Proggen die.." hatte ich den Maus-Cursor schon fast auf diesem "X".. ..
..aber Du hast Dich schnell gesteigert in der Ausdrucksweise. Ist grade ein heikles Thema hier im Forum, weil einige hier die letzten Wochen ihre Fragen so formuliert haben wie sie auch mit ihrem Bewährungshelfer sprechen.. egal - back to thread.
Arrays gibt es tatsächlich nicht im Batch - soweit die schlechte Nachricht.
Die gute Nachricht: Sind auch nicht nötig, da in der CMD-Shell Variablen in Variablennamen erlaubt sind bzw. aufgelöst werden.
Beispiel am CMD-Prompt:
>set "var1=Das ist " & set "var2=nur ein" & set "var3= Pseudoarray"
>set var
var1=Das ist
var2=nur ein
var3= Pseudoarray
Um allerdings jetzt einen Variablennamen "var1" zusammenbasteln will aus "var"+"1", ist die Syntax ein bissl strange... da ich dem CMD-Interpreter sagen muss, welche Variablen er zuerst und welche teil-aufgelösten er danach auflösen soll, haben die drei Weisen von M$ die "EnableDelayedExpansion" eingeführt. Siehe die Hilfe unter "set /?" am Prompt. Oder in den neueren Tutorials im Bereich "Batch & Shell".
Insbesondere unter "SetLocal EnableDelayedExpansion".
Kurzskizze DelayedExpansion:
CMD-Variablen werden erkannt, wenn sie eingeschlossen sind in %-Zeichen (%var%).
Eine Variable, die erst delayed aufgelöst werden soll, weil sie noch einen inneren "variablen" Teil hat,
wird in "!"-Zeichen statt in "%"-Zeichen geschrieben.
*grummel... bin kein guter Erklärer.. ich zeigs Dir:
............nacheinander den Befehl "Set var1".."Set var2".."Set var3" erzeugen:
>for %i in (1,2,3) do @set var%i
var1=Das ist
var2=nur ein
var3= Pseudoarray
.......und so bewirke ich, das zuerst "%i" aufgelöst wird zu 1,2,3 und dann %var1%, %var2%, %var3%:
>for %i in (1,2,3) do @echo !var%i!
Das ist
nur ein
Pseudoarray
(((((( Klammer auf....
Wenn es Dir lieber ist, kannst Du natürlich auch Variablen definieren, die so heißen:
Set var1[1]=test
...aber dann ist "var1[1]" ein Variablenname, kein Array-Element. ))))))))) Klammer zu
~~~~~~~~~~
Der langen Rede kurzer Sinn: Wenn Du Deine Zeilen so lässt, ware eine Lösung so:
.....
set WALLPAPER[3]="C:\Dokumente und Einstellungen\All User\Eigene Bilder\Background3.jpg"
set WALLPAPERS=3
....
.....
REM ---Definiert Variable "NUM" mit einer zufallszahl zwischen 1 und "%WALLPAPER%"
set /a NUM=1+%WALLPAPERS%*%random%/32768
***edited Biber** set NEWWP=WALLPAPER[%NUM%]
set NEWWP=!WALLPAPER[%NUM%]!
::::::::::Bibertest
echo !wallpaper[%num%]!
:: Output: "C:\Dokumente und Einstellungen\All User\Eigene Bilder\Background3.jpg"
set newwp
:: Output: NEWWP="C:\Dokumente und Einstellungen\All User\Eigene Bilder\Background3.jpg"