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
GELÖST

Wie kann ich Variablennamen fortlaufend erzeugen?

Frage Entwicklung Batch & Shell

Mitglied: 42583

42583 (Level 1)

16.02.2008, aktualisiert 20:44 Uhr, 5537 Aufrufe, 6 Kommentare

Hallo,

ich habe eine Exceltabelle mit mehreren Spalten. Jede einzelne Spalte kopierte ich in einer Textdatei. Nun will ich in einer Schleife die Variablen vorname1, vorname2 .... aus der Textdatei erzeugen, um diese dann in der Batch weiter zu verarbeiten. Somit soll dann vorname1 den vornamen aus der ersten Zeile der Textdatei bekommen usw usw. Das gleiche möchte ich dann mit anderen Angabedaten machen.

Anbei meinen Quelltext, der leider nicht so funktioniert;

set /a zahl=0
Setlocal enableDelayedExpansion
for /f "tokens=1 delims=" %%i in (vornamen.txt) do (
set /a zahl=%zahl%+1
set vornamen%zahl%=%%i
)

Bei der Test-Ausgabe echo %vornamen1% liefert er mir nur eine Echo ON Ausgabe.
Kann mir jemand da weiter helfen?
Mitglied: bastla
16.02.2008 um 13:41 Uhr
Hallo gunnar-hro!

Grundsätzlich würde ich die Frage nach der Sinnhaftigkeit dieser Variablennummerierung stellen - eine sofortige Verarbeitung innerhalb der Schleife oder per Unterprogramm würde das Problem automatisch lösen.

Da Du Dir das aber wahrscheinlich ohnehin schon überlegt hast, kannst Du es so versuchen:
01.
@echo off & Setlocal enableDelayedExpansion 
02.
set /a zahl=0 
03.
for /f "delims=" %%i in (vornamen.txt) do ( 
04.
    set /a zahl+=1 
05.
    set "vornamen!zahl!=%%i" 
06.
07.
 
08.
set zahl=1 
09.
:loop 
10.
echo %zahl%: !vornamen%zahl%! 
11.
set /a zahl+=1 
12.
if defined vornamen%zahl% goto :loop
Der zweite Teil ist ein Beispiel für die spätere Verwendung der Variablen.

Grüße
bastla
Bitte warten ..
Mitglied: 42583
16.02.2008 um 14:15 Uhr
Vielen Dank, es funktioniert! Ich habe aber noch paar Fragen. ....
Wozu die " und die ! beim >>"vornamen!zahl!=%%i"<< ?
Bei der Ausgabe, da hast du ach wieder die ! gesetzt, was ist da der Unterschied zum %?
>>!vornamen%zahl%!<<
Bitte warten ..
Mitglied: bastla
16.02.2008 um 14:29 Uhr
Hallo gunnar-hro!

Wozu die " und die ! beim >>"vornamen!zahl!=%%i"<<
Die " sorgen dafür, dass bei der Zuweisung zB keine Leerzeichen am Ende verloren gehen - da Du mit "delims=" sicher gestellt hast, dass die gesamte Zeile ausgelesen wird, ist es konsequent, auch die gesamte Zeile zuzuweisen.

Abgesehen davon setze ich die " (auch deshalb, weil sich im Normalfall keine Nachteile aus deren Verwendung ergeben) mittlerweile gewohnheitsmäßig.
"!" ersetzt bei Verwendung von "delayedexpansion" das "%"-Zeichen als Variablenbegrenzer - alles, was verzögert (also erst bei der unmittelbaren Verwendung, nicht schon zu Beginn eines Blocks, zB einer Schleife) aufgelöst (ausgelesen) werden soll, muss mit "!" markiert werden.

Im ersten Fall würdest Du bei Verwendung von %zahl% immer nur den Wert zu Beginn der Schleife, also 0 erhalten - die Berücksichtigung der innerhalb der Schleife vorgenommenen Veränderung (+1) kann nur durch "verzögerte Auflösung" erfolgen, daher "!".

Im zweiten Fall willst Du ja nicht eine Anzeige von zB "vorname3" erhalten, sondern es soll %vorname3%, also der Inhalt, ausgegeben werden - daher ist zunächst %zahl% auszuwerten und danach (= "verzögert") der Inhalt von vorname3 - daher auch hier wieder "!".

Grüße
bastla
Bitte warten ..
Mitglied: 42583
16.02.2008 um 14:59 Uhr
Hallo, irgendwie scheint es doch nicht zu gehen.

Mein Ziel ist, aus Hans Meier HMeier zu generieren. Also habe ich folgendes erstellt;
echo !vornamen%zahl%:~0,1!!nachnamen%zahl%!>>anmeldenamen.txt
Leider gibt er nur den ersten Buchstaben vom Vornamen aus, den Rest ignoriert er ganz. Warum das?
Bitte warten ..
Mitglied: bastla
16.02.2008 um 15:19 Uhr
Hallo gunnar-hro!

Sollte eigentlich klappen (tut es zumindest bei mir) ...

Bist Du sicher, dass die Schreibweise von "nachnamen" stimmt, und dass die Nummerierung der "nachnamen"-Variablen in Ordnung ist? Zu letzterem: Falls Du aus getrennten Dateien einlesen musst, vor dem Einlesen der Nachnamen wieder ein "set zahl=0" verwenden!

Grüße
bastla

P.S.: Hatte ich übrigens erwähnt, dass es vermutlich einfacher wäre, auf die nummerierten Variablen zu verzichten?

P.P.S.: In Excel lässt ich sowas übrigens ganz einfach umsetzen: =LINKS(A2;1) & B2
Bitte warten ..
Mitglied: 42583
16.02.2008 um 20:44 Uhr
Wow, genau das hilft mir weiter. So brauch ich dann nur noch die fertigen Daten nutzen, um damit meine AD-Nutzer anzulegen. Denke mal, dass es der Thread geschlossen werden kann. Nochmals vielen Dank Bastla ;)
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Access 2013, aus einem Formular mit Hauptnummer eine Anzahl Formulare mit fortlaufender Unternummer erzeugen
Frage von MuseumMLMicrosoft Office

Hallo liebe Freunde, habe eine Reihe von Foren durchgeforstet ohne fündig zu werden In meinem Zeichnungsarchiv sind Zeichnungen in ...

VB for Applications
Variablenname aus Zähler bilden
gelöst Frage von goodbytesVB for Applications2 Kommentare

Hallo, in einem vbs-Script möchte ich mittels einer Schleife alle Files verschiedener Ordner durchlaufen und löschen. Die verschiedenen Unterordner ...

Batch & Shell
Daten kopieren und umbenennen fortlaufend numerisch
Frage von QuercusBatch & Shell1 Kommentar

Hallo Gemeinde, eine Frage zu dem Batch code. Funktion des Codes: aus C:\test\Ziel werden bestehende *.jpg durchsucht und anhand ...

Microsoft Office
Word 2010, Etiketten fortlaufend nummerieren
gelöst Frage von d4shoerncheNMicrosoft Office2 Kommentare

Guten Morgen, irgendwie habe ich Probleme damit meine Etiketten in Word 2010 fortlaufend zu nummerieren. Ich habe die Etiketten ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Necur-Botnet soll Erpressungstrojaner Scarab massenhaft verbreiten

Information von BassFishFox vor 11 StundenErkennung und -Abwehr

12,5 Millionen Spam-Mails aus einem Bot-Netz mit 6 Millionen Computern? Eigentlich eine schwache Leistung. Die Erpresser setzen dabei auf ...

Microsoft

Nadeldrucker-Problem unter Windows - Microsoft liefert Updates

Information von BassFishFox vor 12 StundenMicrosoft

Hat ja nicht lange gedauert. Nachdem die November-Updates für Windows 7, 8.1 und 10 zahlreiche Nadeldrucker lahmgelegt hatten, stellt ...

Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 19 StundenLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

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

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

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

Heiß diskutierte Inhalte
Windows Server
Kann man im KMS nachschauen , wieviele Clients den Key in Anspruch genommen haben
gelöst Frage von rainergugusWindows Server15 Kommentare

Hallo, wir haben einen KMS Windows 10 Key. Dieser ist ja W7 kompatibel. Aber unser Windows 7 Pool registriert ...

Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

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 ...