svatvn
Goto Top

Befehl wiederholen, mit neuen Variablen

-

Hi all,
ich bin neu hier und möchte erstmal allen hier ein herzliches Hallo sagen. Durch Google bin ich ständig auf dieses Forum gestoßen und konnte bisher immer antworten durch vorhandene
Thread finden. Leider fand ich zu dem jetzigen Problem keine Antwort, weshalb ich mich dazu entschied, mich hier anzumelden. Ich hoffe, dass ihr auch zu diesem Problem eine Antwort parat habt face-smile

Ich möchte gerne einen Befehl ausführen,
set var=klaus
echo hallo %var%
es kommt also ein hallo Klaus raus
soweit sogut,

nun möchte ich, dass der Befehl wiederholt wird, und zwar jedes mal mit einer neuen Variable, aus einer Liste, bis alles abgearbeitet ist.

Das ganze sieht momentan so aus:

set var=Klaus
set var=Heinz
set var=Paul
set var=Ulf
echo hallo %var%
Momentan, wird der Befehl echo nur einmal ausgeführt, und zwar mit der Variable Klaus.
es wird also nur "hallo Klaus" ausgegeben
Ich möchte aber, dass er den Befehl auch mit der Variable Heinz, Paul und Ulf durchläuft.
also:
hallo Klaus
hallo Heinz
hallo Paul
hallo Ulf


Ich könnte es auch so machen:

set var=Klaus
echo hallo %var%

set var=Heinz
echo hallo %var%

set var=Paul
echo hallo %var%

set var=Ulf
echo hallo %var%
nur ist dies etwas überladen, weil jedes mal ein "echo hallo %var%" unter der neuen Variable stehen muss.

Die Variable var muss var bleiben und darf nicht var1, var2, var3 werden. Ich möchte später also einfach weitere werte für diese selbe Variable eingeben können, die Liste also fortzsetzen mit var=Hans, var=Jörg...usw.

Kann man es kompakter Programmieren?

Content-Key: 172770

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

Printed on: April 16, 2024 at 18:04 o'clock

Mitglied: 99045
99045 Sep 07, 2011 at 22:47:41 (UTC)
Goto Top
Hallo, und willkommen im Forum.

Momentan, wird der Befehl echo nur einmal ausgeführt, und zwar mit der Variable Klaus.
Das glaube ich dir nicht: Er wird sicherlich Hallo Ulf ausgeben, denn das ist der letzte Wert, mit dem du var gesetzt hast. face-wink

Kann man es kompakter Programmieren?

Ja, könnte man:
for %%a in (Klaus Heinz Paul Ulf) do @echo Hallo %%a

Gruß
Member: svatvn
svatvn Sep 07, 2011 at 23:58:31 (UTC)
Goto Top
hallo Kaputtnick,
deine Lösung missachtet aber die vorgegebenen Variablen, die ich ja unbedingt brauche.
Meine Absicht war es, dass die Schleife quasi sich die Variablen "abholt" und für jede einzelne Variable den Befehl ausführt, bis alle Variablen durch sind. An den Befehl soll an sich nichts mehr verändert werden

Wen es interessiert, kann sich mein kompliziertes Vorhaben genauer anschauen:
ich will per Batch, die Dateizuordnung ändern
set fi=jpg
set na=PhotoViewer
set pa=C:\Programme\PhotoViewer\PhotoViewer.exe


rem ##;FILE TYPE
REG ADD "HKEY_CLASSES_ROOT\.%fi%" /v "" /t REG_SZ /d "%fi%-file" /f  
rem ##;OPEN DEFAULT
REG ADD "HKEY_CLASSES_ROOT\%fi%-file\Shell\open\command" /v "" /t REG_EXPAND_SZ /d "\"%pa%\" \"%%1\"" /f  

der erste Teil besteht aus einem Variablen-Block, der später bei Bedarf ergänzt werden soll. Der zweite Teil ist fix und daran soll auch nichts mehr geändert werden
Nun möchte ich gerne in Zukunft weitere Variablen-Blöcke ergänzen können

set fi=jpg
set na=PhotoViewer
set pa=C:\Programme\PhotoViewer\PhotoViewer.exe

set fi=avi
set na=VideoViewer
set pa=C:\Programme\VideoViewer\videoViewer.exe

set fi=mp3
set na=AudioViewer
set pa=C:\Programme\AudioViewer\AudioViewer.exe


rem ##;FILE TYPE
REG ADD "HKEY_CLASSES_ROOT\.%fi%" /v "" /t REG_SZ /d "%fi%-file" /f  
rem ##;OPEN DEFAULT
REG ADD "HKEY_CLASSES_ROOT\%fi%-file\Shell\open\command" /v "" /t REG_EXPAND_SZ /d "\"%pa%\" \"%%1\"" /f  
Die Befehle sollen einmal für die jpg, avi, mp3 durchlaufen. So wie es gerade da steht momentan, läuft es nur für mp3 durch....
Alles was ich später hinzufügen will, sind neue, weitere Variablen-Blöcke....also,..mp4, gif...
wie zum beispiel dieser Block

set fi=wma
set na=AudioViewer
set pa=C:\Programme\AudioViewer\AudioViewer.exe

Der Block soll dem Befehl einfach jedes mal neu "befuttern" mit neuen Informationen.
usw...

Hoffe das ist verständlich
Mitglied: 99045
99045 Sep 08, 2011 at 00:16:39 (UTC)
Goto Top
Man kann aber den gleichen Variablennamen nicht mehrfach mit unterschiedlichen Werten verwenden, ohne dass der vorherige Wert überschrieben wird, also futsch ist.

Du kannst dir die Werte, die du zum Füllen verwenden willst, z. B. in eine Textdatei schreiben und mit einer Schleife abholen, dann kannst du die Variablen neu zuordnen und verwenden.

Eine Alternative und einfacher ist es, für den Reg-Teil ein Unterprogramm über eine Sprungmarke zu verwenden, also nach den Zuweisungen jeweils ein call :wasweissich aufzurufen´, bei deinem Beispiel also nach den Zeilen 3, 7 und 11. Und in der nachfolgenden Zeile rufst du Zeile 13 auf und setzt dort eine passende Sprungmarke.

Ich gehe jetzt erst mal an der Matratze horchen.
Gute Nacht.
Member: svatvn
svatvn Sep 08, 2011 at 00:32:46 (UTC)
Goto Top
hey wow,
ein Super Tipp mit den Sprungmarken. Klasse. So ähnlich hatte ich es mir vorgestellt.

Aber wie geht es dann weiter?

set fi=jpg
set na=PhotoViewer
set pa=C:\Programme\PhotoViewer\PhotoViewer.exe
call :Hauptbefehl

set fi=avi
set na=VideoViewer
set pa=C:\Programme\VideoViewer\videoViewer.exe
call :Hauptbefehl

set fi=mp3
set na=AudioViewer
set pa=C:\Programme\AudioViewer\AudioViewer.exe
call :Hauptbefehl

:Hauptbefehl
rem ##;FILE TYPE
REG ADD "HKEY_CLASSES_ROOT\.%fi%" /v "" /t REG_SZ /d "%fi%-file" /f  
rem ##;OPEN DEFAULT
REG ADD "HKEY_CLASSES_ROOT\%fi%-file\Shell\open\command" /v "" /t REG_EXPAND_SZ /d "\"%pa%\" \"%%1\"" /f  
Wie kann ich ihm sagen, dass der :Hauptbefehl nur verschachtelt aufrufen soll und dann dort weiter macht, wo er stehen geblieben ist?
Denn momentan überspringt er avi und mp3
Member: rubberman
rubberman Sep 08, 2011 at 01:41:00 (UTC)
Goto Top
Hallo svatvn.

Nur mal ganz nebenbei...
Hast du schon von den Befehlen ASSOC und FTYPE gehört?

Grüße
rubberman
Member: Skyemugen
Skyemugen Sep 08, 2011 at 05:50:03 (UTC)
Goto Top
Aloha rubberman,

[OT]das wäre doch zu einfach ... lieber schreibt er ein Skript, wo er alles manuell festlegt und so viel durchackern lässt [/OT] ohne überhaupt goto :eof in der Sprungmarke zu verwenden ...

greetz André
Mitglied: 99045
99045 Sep 08, 2011 at 09:03:10 (UTC)
Goto Top
Hi,

Zitat von @svatvn:
Denn momentan überspringt er avi und mp3

Du musst sowohl eine Zeile 21 mit goto :eof anfügen als auch in Zeile 15 den gleichen Befehl einsetzen.
Member: svatvn
svatvn Sep 08, 2011 at 09:55:30 (UTC)
Goto Top
hallo Leute,
mit goto: eof hats super geklappt, vielen Dank an Kaputtnik und andere face-smile
assoc und ftype werde ich mir jetzt genauer anschauen. Auch ein super Tipp

@Skyemugen
ich bin kein gelernter Programmierer, berufsmäßig habe ich überhaupt nichts mit Programmierung zun, von daher finde ich deine herablassende Bemerkung nicht ganz fair.
Trotzdem danke,
Member: Skyemugen
Skyemugen Sep 09, 2011 at 05:46:35 (UTC)
Goto Top
Aloha,

von daher finde ich deine herablassende Bemerkung nicht ganz fair.

Nun, um die Forensuche zu nutzen oder einfach mal zwei, drei Threads im B-Bereich hier anzuschauen, muss man kein

gelernter Programmierer

sein face-wink

greetz André

P.S.: die genannten Befehle assoc und ftype sind m.M.n. sinnvoller zu gebrauchen als das manuelle Rumschreiben in der Registry (und Hilfe gibt es zu jedem Befehl per Befehl /?) face-wink