Batch Zusammengesetzer Variablenname, vorhandene Variable ausgeben

hui27

Newbie
Registriert
Aug. 2015
Beiträge
2
Hallo erst mal, ich bin neu hier im Forum und hoffe ich bin hier richtig.

Ich suche schon seit einiger zeit nach einer Lösung und werde verrückt im Internet.

Grob gesagt:
Ich schreibe an einem kleinen Script zum Kopieren von Dateien auf diverse Netzwerkadressen.
Das läuft auch alles super, mit Auflistung, Fehlerangabe, Logdatei, Überprüfung..

Ich möchte jetzt gerne etwas "variabler" sein, was die zu kopierenden Dateien angeht.

Hierzu möchte ich angeben wie viele Dateien ich habe, und natürlich die Dateinamen und Zielpfade:

Code:
set /A DATEIANZAHL=5

	set UPDATEDATEI1=datei1
	set ZIELORDNER1=Ordner1\unterOrdner1
	set UPDATEDATEI2=datei2
	set ZIELORDNER2=Ordner2\unterOrdner2
	set UPDATEDATEI3=datei3
	set ZIELORDNER3=Ordner3\unterOrdner3
	set UPDATEDATEI4=datei4
	set ZIELORDNER4=Ordner4\unterOrdner4

Dieser Teil muss jedes Mal per Hand bearbeitet werden, da sich Dateianzahl und Datei selbst ja ändert.
Die Dateien werden später per Robocopy kopiert (einzelne Dateien, da verschiedene Pfade notwendig).
(robocopy C:\ALT C:\NEU Datei.txt /XO /r:1 /w:1 /LOG+:C:\LOG.txt /v /NJS /TS)

Jetzt bräuchte ich eine Art Schleife, die ich für die Auflistung der Dateien, den Robocopy Befehl und die Überprüfung einrichten kann, damit ich jeweils nur einen Befehlt mit einer Variable habe, die dann natürlich hochgezählt wird.

Also etwas in der Art:
Code:
:ZAEHLEN
set /A DATEIZAEHLER=0
set /A DATEIZAEHLER=%DATEIZAEHLER% +1
set UPDATEDATEI=UPDATEDATEI%DATEIZAEHLER%
set ZIELORDNER=ZIELORDNER%DATEIZAEHLER%

echo 	Datei %DATEIZAEHLER%: %UPDATEDATEI%
echo 	Ziel  %DATEIZAEHLER%: %ZIELORDNER%

if %DATEIZAEHLER% GEQ %DATEIANZAHL% goto NEXT
	goto ZAEHLEN

Das Problem ist, dass ich einen "variablen" Variablennamen habe und hier leider nur der String ausgegeben wird, der gebildet wird. Das ist total logisch. Aber ich möchte z.B. aus UPDATEDATEI%DATEIZAEHLER% nicht "UPDATEDATEI1" erhalten, sondern was im Ergebnis - %UPDATEDATEI1% enthalten ist haben. Dann wird hochgezählt und es geht weiter, bis zur Angabe der Dateianzahl oben.

Gibt es dafür eine Lösung, ich komm absolut nicht drauf. Es können auch gern externe "temporäre" Dateien angelegt und wieder ausgelesen werden..

Ich kann leider nur etwas cmd/bat ..

Sonst muss ich jedesmal die Anzeige, das Kopieren, die Überprüfung per Hand im kompletten Script kopieren/anpassen..

Viele Grüße
 
Das geht wahrscheinlich am besten mit EnableDelayedExpansion

Code:
@echo off

setlocal EnableDelayedExpansion

set UPDATEDATEI[1]=datei1
set ZIELORDNER[1]=Ordner1\unterOrdner1
set UPDATEDATEI[2]=datei2
set ZIELORDNER[2]=Ordner2\unterOrdner2
set UPDATEDATEI[3]=datei3
set ZIELORDNER[3]=Ordner3\unterOrdner3
set UPDATEDATEI[4]=datei4
set ZIELORDNER[4]=Ordner4\unterOrdner4

set /A DATEIZAEHLER=0
:ZAEHLEN
set /A DATEIZAEHLER=%DATEIZAEHLER%+1
if defined UPDATEDATEI[%DATEIZAEHLER%] (
	echo 	Datei %DATEIZAEHLER%: !UPDATEDATEI[%DATEIZAEHLER%]!
	echo 	Ziel  %DATEIZAEHLER%: !ZIELORDNER[%DATEIZAEHLER%]!
	goto ZAEHLEN
)
 
Hi,

so wie du dein Skript geschrieben hast, müssten die zu kopierenden Dateien als UPDATEDATEI1, UPDATEDATEI2, usw. benannt sein. Ist das so? Anonsten schrieb doch mal, wie die Dateien wirklich heissen.
 
Vielen lieben Dank für die schnelle Antwort @Hinagiku

Den Befehl kannte ich nicht, er scheint genau das zu machen, was ich brauche :)

Ich versuche das in mein Script einzubauen & auszubauen..


@redasurc

Tut mir leid, wenn es etwas chaotisch ist/war.
Die Dateinamen waren in dem Fall datei1, datei2, datei3..
Die Variable, in der die Dateinamen stehen heißen aber UPDATEDATEI1, UPDATEDATEI2 usw.

Bsp.:
Code:
 UPDATEDATEI1=Bild.jpg
 UPDATEDATEI2=Archiv.zip
 UPDATEDATEI3=Einstellungen.reg
 UPDATEDATEI1=update.cmd

Die Dateien ändern sich ständig und müssen vor jedem Ausführen des Skriptes angepasst werden.

Viele Dank!!
 
Zurück
Oben