Anzahl Variablen erkennen und automatisch in Schleife verarbeiten
Hallo,
ich habe in meiner Batches oft folgenden Wunsch:
Um es gleich leichter verständlich zu machen verdeutliche ich mein Anliegen anhand eines Beispieles:
Ich bestimme z.B. folgende vier Variablen zu Beginn meiner Batch:
Im weiteren Verlauf möchte ich damit folgendes anstellen:
Jetzt ist das erstens ziemlich viel schreibarbeit, und zweitens macht sich bei mir öfters der Wunsch breit, eine Variable hinzuzufügen, leider muss ich dann im weiteren Code auch einen XCOPY Befehl hinzufügen.
Ist das nicht irgendwie einfacher lösbar? Ich denke da an eine Schleife, die z.B. erkennt wieviele Variablen festgelegt wurden, und dann - in diesem Beispiel eben vier mal - durchläuft und bei jedem Durchlauf die nächste Variable verwendet. Somit benötige ich nur eine XCOPY Zeile, was nicht zuletzt der Übersichtlichkeit des Quellcodes dient.
Sollte das wirklich möglich sein, stehe ich vor einem weiterem Problem: Ich möchte natürlich mehr als nur vier Variablen definieren, aber nur vier für die Schleife verwenden müssen.
Bin für eure konstruktiven Vorschläge offen!
Euer
crazyhoesl
ich habe in meiner Batches oft folgenden Wunsch:
Um es gleich leichter verständlich zu machen verdeutliche ich mein Anliegen anhand eines Beispieles:
Ich bestimme z.B. folgende vier Variablen zu Beginn meiner Batch:
set backupdir=%Systemdrive%\Backups
set progdir=%Systemdrive%\Progs
set docsdir=%Systemdrive%\User\Docs
set imgdir=%homepath%\Images
Im weiteren Verlauf möchte ich damit folgendes anstellen:
xcopy /Y %backupdir%\*.* F:\
xcopy /Y %progdir%\*.* F:\
xcopy /Y %docsdir%\*.* F:\
xcopy /Y %imgdir%\*.* F:\
Jetzt ist das erstens ziemlich viel schreibarbeit, und zweitens macht sich bei mir öfters der Wunsch breit, eine Variable hinzuzufügen, leider muss ich dann im weiteren Code auch einen XCOPY Befehl hinzufügen.
Ist das nicht irgendwie einfacher lösbar? Ich denke da an eine Schleife, die z.B. erkennt wieviele Variablen festgelegt wurden, und dann - in diesem Beispiel eben vier mal - durchläuft und bei jedem Durchlauf die nächste Variable verwendet. Somit benötige ich nur eine XCOPY Zeile, was nicht zuletzt der Übersichtlichkeit des Quellcodes dient.
Sollte das wirklich möglich sein, stehe ich vor einem weiterem Problem: Ich möchte natürlich mehr als nur vier Variablen definieren, aber nur vier für die Schleife verwenden müssen.
Bin für eure konstruktiven Vorschläge offen!
Euer
crazyhoesl
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 71369
Url: https://administrator.de/contentid/71369
Ausgedruckt am: 25.11.2024 um 11:11 Uhr
4 Kommentare
Neuester Kommentar
Moin crazyhoesl,
ich versteh das Problem nicht ganz... es steht dir doch frei, deine Variablen irgendwo als Verarbeitungsliste einer FOR-Anweisung zu verwenden.
Vielleicht hilft folgendes Beispiel am CMD-Prompt:
Im Bereich "Batch und Shell" steht auch ein Tutorial aus der "Batch for Runaways"-Reihe, in dem beschrieben wird, wie bestimmte Variablen zu Debugzwecken "verfolgt", gesetzt, gelöscht.... na ja, halt selektiv auch in Schleifen verwendet werden können.
Schau mal in BatchTut I und II ("FindLongPath" und "Ein bisschen Handwerkszeugs").
Gruß
Biber
ich versteh das Problem nicht ganz... es steht dir doch frei, deine Variablen irgendwo als Verarbeitungsliste einer FOR-Anweisung zu verwenden.
Vielleicht hilft folgendes Beispiel am CMD-Prompt:
(=23:52:29 D:\temp=)
>set "YED=Y:\Eigene Dateien"
(=23:52:56 D:\temp=)
>set "dworkdir=D:\Work"
(=23:53:04 D:\temp=)
>for %i in ("%YED%" "%dworkdir%") do @echo xcopy "%~i\*.*" f:\archiv\
xcopy "Y:\Eigene Dateien\*.*" f:\archiv\
xcopy "D:\Work\*.*" f:\archiv\
Im Bereich "Batch und Shell" steht auch ein Tutorial aus der "Batch for Runaways"-Reihe, in dem beschrieben wird, wie bestimmte Variablen zu Debugzwecken "verfolgt", gesetzt, gelöscht.... na ja, halt selektiv auch in Schleifen verwendet werden können.
Schau mal in BatchTut I und II ("FindLongPath" und "Ein bisschen Handwerkszeugs").
Gruß
Biber
... es steht dir doch frei, deine Variablen irgendwo als Verarbeitungsliste einer FOR-Anweisung zu verwenden.
... oder gleich ganz darauf zu verzichten (womit Du Ergänzungen nur an einer einzigen Stelle vornehmen müsstest):for %%i in ("%Systemdrive%\Backups" "%Systemdrive%\Progs" "%Systemdrive%\User\Docs" "%homepath%\Images") do echo xcopy /Y "%%~i\*.*" F:\
Anmerkungen: Das "echo" dient nur zu Demozwecken und ist im "Ernstfall" natürlich wegzulassen. Außerdem ist Biber's Variante für die Kommandozeile formuliert (%i) und meine Version für Batch (%%i) gedacht.
Eine weitere Möglichkeit wäre natürlich, die einzelnen Pfade (jeden in einer eigenen Zeile) in einer Textdatei zu hinterlegen und diese auszulesen:
for /f "delims=" %%i in (D:\Pfadliste.txt) do echo xcopy /Y "%%~i\*.*" F:\
Grüße
bastla