crazyhoesl
Goto Top

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:

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

Content-Key: 71369

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

Printed on: April 19, 2024 at 20:04 o'clock

Member: Biber
Biber Oct 18, 2007 at 21:59:11 (UTC)
Goto Top
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:
(=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
Member: bastla
bastla Oct 18, 2007 at 22:18:22 (UTC)
Goto Top
... 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
Member: Biber
Biber Nov 19, 2007 at 08:41:11 (UTC)
Goto Top
Moin kratzihoesl,
Bin für eure konstruktiven Vorschläge offen!
Heute vor einem einem Monat haben wir konstruktiv geantwortet.
Gibst Du mal konstruktives Feedback?

Danke
Biber
Member: Biber
Biber Nov 21, 2007 at 07:38:00 (UTC)
Goto Top
Hm,

das werte ich mal Antwort und nehme es zum Anlass, diesen Beitrag zu schließen.

@kratzi: Bin aber natürlich per PN erreichbar, falls der Beitrag wieder geöffnet werden soll.

Grüße
Biber