Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Batchdatei - eine Variable zusammensetzen, um daraus einen Dateinamen zu bilden

Frage Entwicklung Batch & Shell

Mitglied: Heppy225

Heppy225 (Level 1) - Jetzt verbinden

24.05.2011 um 00:28 Uhr, 4204 Aufrufe, 2 Kommentare

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.
Mitglied: Friemler
24.05.2011 um 01:13 Uhr
Hallo Heppy225,

um es nach Deiner Idee zu realisieren, könntest Du es so machen:
01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
set "counter=3" 
06.
set "T=DT" 
07.
 
08.
set "A1=xxx" 
09.
set "A2=yyy" 
10.
set "A3=zzz" 
11.
 
12.
for /l %%i in (1,1,%counter%) do ( 
13.
  for /f "tokens=1* delims==" %%j in ('set a%%i') do ( 
14.
    echo md "%%k%T%" 
15.
16.
)
Hier wird der 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:
01.
@echo off 
02.
 
03.
setlocal enabledelayedexpansion 
04.
 
05.
set "counter=3" 
06.
set "T=DT" 
07.
 
08.
set "A1=xxx" 
09.
set "A2=yyy" 
10.
set "A3=zzz" 
11.
 
12.
for /l %%i in (1,1,%counter%) do ( 
13.
  echo md "!A%%i!%T%" 
14.
)
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 % 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:
01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
set "counter=3" 
06.
set "T=DT" 
07.
 
08.
set "A1=xxx" 
09.
set "A2=yyy" 
10.
set "A3=zzz" 
11.
 
12.
for /l %%i in (1,1,%counter%) do ( 
13.
  call echo md "%%A%%i%%%T%" 
14.
)
Damit der Schnipsel funktioniert, nur das 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:
01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
set "T=DT" 
06.
set "FirstPart="xxx" yyy "zzz"" 
07.
 
08.
for %%i in (%FirstPart%) do ( 
09.
  echo md "%%~i%T%" 
10.
)
Zu Demonstrationszwecken habe ich mal einen Teil der Strings in 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
Bitte warten ..
Mitglied: bastla
24.05.2011 um 08:00 Uhr
@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:
01.
@echo off & setlocal 
02.
 
03.
set "T=DT" 
04.
 
05.
::DATA xxx 
06.
::DATA yyy 
07.
::DATA zzz and more 
08.
 
09.
for /f "tokens=1*" %%i in ('findstr /b "::DATA" %0') do ( 
10.
    echo md "%%j%T%" 
11.
)
Damit entfiele die Notwwendigkeit der Nummerierung und Anpassung der "for /l"-Schleife bzw deren Endwertes bei gleichzeitigem Beibehalten des Arguments "Übersichtlichkeit".

Die Kennzeichnung mit "DATA" hat natürlich nostalgische Gründe und könnte auch anders erfolgen ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Variabler Dateiname innerhalb einer Batchdatei
gelöst Frage von SpikeeeBatch & Shell5 Kommentare

Hallo Liebe Gemeinde! Vielleicht eine relativ simpel zu lösende Aufgabe, jedoch tu ich mich da grad ein wenig schwer, ...

Batch & Shell
Wildcard im Dateinamen möglich bei Batchdatei?
Frage von imebroBatch & Shell3 Kommentare

Hallo, ich habe zwar hier ein paar Fragen zu Wildcards gefunden. Aber noch nicht so genau meine Lösung. Ich ...

Batch & Shell
Ausgelagerte Variablen in Batchdatei
gelöst Frage von mp-homeBatch & Shell6 Kommentare

Hallo Forum, ich versuche eine Batch zu erstellen, die in mehreren (Windows) Umgebungen laufen soll. Dazu möchte ich die ...

Batch & Shell
Batchdatei: Variablen-Wertezuweisung
gelöst Frage von donnyS73lbBatch & Shell2 Kommentare

Hallole, eine Anfängerfrage: Was mache ich hier falsch? echo %variable1% liefert das richtige Ergebnis, denn variable1 hat einen gültigen ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 19 StundenBatch & Shell8 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 21 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Windows Server
Sichere Remote Desktop Verbindung wie?
gelöst Frage von nuss33Windows Server11 Kommentare

Hallo zusammen, eins vorweg: Ich besitze einen privaten Windows Server 2008 R2 zu Hause im Netzwerk er wird nicht ...