Batchdatei - eine Variable zusammensetzen, um daraus einen Dateinamen zu bilden
Hallo
nach dem ersten Gehversuch eine weitere Frage, deren Antwort ich selbst nicht finden konnte
Ich möchte mehrere Ordner automatisch anlegen lassen. Da dieser Vorgang täglich passiert, bietet sich eine Batchdatei an.
Da ein festes System in den Ordnernamen besteht, bietet sich eine FOR-Schleife als Lösung an.
Mein Gedankenansatz war, um verschiedene Ordnernamen durch eine FOR-Schleife zu verarbeiten, Variablen mit fortlaufender Nr zu erstellen.
counter=3
set T=DT
set A1=xxx
set A2=yyy
set A3=zzz
und diese dann mit dem Schleifenzähler %%i anzugeben:
FOR /L %%i IN (1,1,%counter%) DO (
md %A%%%i%T%
)
die Ordnernamen bestehen also aus zwei Teilen: den Variablen Ax und T. Das es nicht funktioniert ist klar.
Meine Frage: geht das überhaupt und wo liegt mein Gedanken- oder Syntaxfehler.
nach dem ersten Gehversuch eine weitere Frage, deren Antwort ich selbst nicht finden konnte
Ich möchte mehrere Ordner automatisch anlegen lassen. Da dieser Vorgang täglich passiert, bietet sich eine Batchdatei an.
Da ein festes System in den Ordnernamen besteht, bietet sich eine FOR-Schleife als Lösung an.
Mein Gedankenansatz war, um verschiedene Ordnernamen durch eine FOR-Schleife zu verarbeiten, Variablen mit fortlaufender Nr zu erstellen.
counter=3
set T=DT
set A1=xxx
set A2=yyy
set A3=zzz
und diese dann mit dem Schleifenzähler %%i anzugeben:
FOR /L %%i IN (1,1,%counter%) DO (
md %A%%%i%T%
)
die Ordnernamen bestehen also aus zwei Teilen: den Variablen Ax und T. Das es nicht funktioniert ist klar.
Meine Frage: geht das überhaupt und wo liegt mein Gedanken- oder Syntaxfehler.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 166774
Url: https://administrator.de/forum/batchdatei-eine-variable-zusammensetzen-um-daraus-einen-dateinamen-zu-bilden-166774.html
Ausgedruckt am: 22.04.2025 um 20:04 Uhr
2 Kommentare
Neuester Kommentar
Hallo Heppy225,
um es nach Deiner Idee zu realisieren, könntest Du es so machen:
Hier wird der
Oder unter Verwendung von verzögerter Variablenerweiterung:
Die verzögerte Variablenerweiterung muss benutzt werden, wenn man innerhalb eines geklammerten Befehlsblocks eine Variable setzen/verändern will und auch innerhalb dieses Blockes wieder verwenden will. Solche Variablen müssen statt mit
Ausserdem geht sowas auch noch:
Damit der Schnipsel funktioniert, nur das
Eine (etwas einfachere) Alternative wäre:
Zu Demonstrationszwecken habe ich mal einen Teil der Strings in
Die Schnipsel machen nichts, sie geben wegen dem
Gruß
Friemler
um es nach Deiner Idee zu realisieren, könntest Du es so machen:
@echo off
setlocal
set "counter=3"
set "T=DT"
set "A1=xxx"
set "A2=yyy"
set "A3=zzz"
for /l %%i in (1,1,%counter%) do (
for /f "tokens=1* delims==" %%j in ('set a%%i') do (
echo md "%%k%T%"
)
)
SET
-Befehl benutzt, um die indizierten Variablen A1
-A3
auszugeben, mit delims==
wird das Gleichheitszeichen der Ausgabe von SET
als Trennzeichen definiert und durch tokens=1*
enthält die automatisch erzeugte Laufvariable %%k alles rechts vom Gleichheitszeichen.Oder unter Verwendung von verzögerter Variablenerweiterung:
@echo off
setlocal enabledelayedexpansion
set "counter=3"
set "T=DT"
set "A1=xxx"
set "A2=yyy"
set "A3=zzz"
for /l %%i in (1,1,%counter%) do (
echo md "!A%%i!%T%"
)
%
mit !
eingefasst werden und hinter SETLOCAL
muss das Schlüsselwort EnableDelayedExpansion
(Zeile 3). In Zeile 13 wären die Ausrufezeichen zwar nicht nötig, da A1
-A3
vor der Schleife gesetzt und innerhalb der Schleife nicht verändert werden, aber so versteht der Befehlsinterpreter, was man mit A%%i
meint.Ausserdem geht sowas auch noch:
@echo off
setlocal
set "counter=3"
set "T=DT"
set "A1=xxx"
set "A2=yyy"
set "A3=zzz"
for /l %%i in (1,1,%counter%) do (
call echo md "%%A%%i%%%T%"
)
ECHO
entfernen, CALL
muss bleiben. Das ist ein Trick, durch den die Befehlszeile doppelt ausgewertet wird. Dabei sind dann aber die vielen Prozentzeichen notwendig (die Prozentzeichen um z.B. %A1%
müssen verdoppelt werden). Die erste Auswertung erfolgt beim analysieren der Parameter für CALL
. Dabei werden %%i und %T% durch ihren aktuellen Wert und die zwei Prozentzeichen vor A
und nach i
durch jeweils ein einzelnes ersetzt. MD
(oder im Beispiel ECHO
) wird dann z.B. mit %A1%DT
aufgerufen. Bei der zweiten Auswertung wird dann %A1%
durch seinen Wert ersetzt.Eine (etwas einfachere) Alternative wäre:
@echo off
setlocal
set "T=DT"
set "FirstPart="xxx" yyy "zzz""
for %%i in (%FirstPart%) do (
echo md "%%~i%T%"
)
FirstPart
in Anführungszeichen gesetzt, somit könnten sie auch Leerzeichen enthalten. Die Anführungszeichen werden durch die Tilde in "%%~i%T%"
entfernt.Die Schnipsel machen nichts, sie geben wegen dem
ECHO
-Befehl innerhalb der FOR
-Schleife nur aus, was passieren würde.Gruß
Friemler
@Friemler
Da müsste dann ja wirklich für jede/n etwas dabei sein ...
Von "Pseudo"-Arrays (indizierten Variablen) in Batch halte ich recht wenig - daher würde ich zur letzten Version tendieren.
Ansonsten hätte ich noch eine weitere Variante:
Damit entfiele die Notwwendigkeit der Nummerierung und Anpassung der "
Die Kennzeichnung mit "DATA" hat natürlich nostalgische Gründe
und könnte auch anders erfolgen ...
Grüße
bastla
Da müsste dann ja wirklich für jede/n etwas dabei sein ...
Von "Pseudo"-Arrays (indizierten Variablen) in Batch halte ich recht wenig - daher würde ich zur letzten Version tendieren.
Ansonsten hätte ich noch eine weitere Variante:
@echo off & setlocal
set "T=DT"
::DATA xxx
::DATA yyy
::DATA zzz and more
for /f "tokens=1*" %%i in ('findstr /b "::DATA" %0') do (
echo md "%%j%T%"
)
for /l
"-Schleife bzw deren Endwertes bei gleichzeitigem Beibehalten des Arguments "Übersichtlichkeit".Die Kennzeichnung mit "DATA" hat natürlich nostalgische Gründe
Grüße
bastla