Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Namen in variabel speichern und in einer zeile ausgeben

Frage Entwicklung Batch & Shell

Mitglied: N4pst3r

N4pst3r (Level 1) - Jetzt verbinden

27.01.2011, aktualisiert 19:34 Uhr, 4590 Aufrufe, 6 Kommentare

eine txt-datei mit for-schleife auslesen, in einer variablen speichern und in EINER zeile ausgeben mit simikolon getrennt!

Hallo

Ich brauche dringend hilfe!
Ich soll noch ein batch-programm schreiben welches eine datei (nur namen) in einer variablen speichert und mit simikolon getrennt in EINER ZEILE ausgibt.
Bis morgen soll es fertig sein und ich komm einfach nicht weiter.
So versuche ich es:

for /f %%x in (test.txt) do (set %a=%a% %%x)
echo %a%

die txt-datei enthält namen wie:

.appletviewer
.JMCApp
.blablabla
.und
.so
.weiter

eigentlich sollte dann mit ausführung des batch-programms folgendes ausgegeben werden (und genau so):

.appletviewer;.JMCApp;.blablabla;.und;.so;.weiter

allerdings wird nur die letzte zeile ausgegeben und beim nochmaligen aufruf des batchs nochmals die letzte zeile angehängt sprich so:

ausführung1:
.weiter

ausführung2:
.weiter .weiter

ausführung3:
.weiter .weiter .weiter

usw

danke schonmal
gruß N4pst3r
Mitglied: Biber
27.01.2011 um 20:03 Uhr
Moin N4pst3r,

willkommen im Forum.
angenommen, dich hätte es zu Günther Johannes Jauch verschlagen und es stünden für die 32000-Taler-Frage
nach dem Fifty-Fifty-Joker nur noch folgende Antworten zur Auswahl:

"Wenn Sie keine Grundkenntnisse von Batchzusammenbraterei hätten, dann sollten Sie..."
A - Mal bei Gelegenheit Fünf-Zeichenfolgen wie DIR/?, FOR/? oder SET /? am CMD-Prompt eingeben
C - Sich mit einem Nick wie "N4pst3r" in einem IT-Erwachsenen-Forum anmelden und um 19:20h sagen "ich brauch dringend bis morgen"

WTF kommst du auf Lösung C????

Ob das richtig war, erfahren Sie nach der Werbung...

Grüße
Biber
Bitte warten ..
Mitglied: N4pst3r
27.01.2011 um 20:18 Uhr
danke und entschuldige...
das ist nunmal die situation...
1. ja ich bewege mich im ms-dos so ziemlich das erste mal (ich programmiere ausschließlich java)
2. dieser name hat für mich eine gewisse bedeutung und sollte niemanden auf irgendwelche sonstigen schlüsse außer das ich mich so nenne bringen
3. okay... ich dachte es ist nicht schwer zu lösen nur für mich stellt es ein riesen problem da... auch weil diese arbeit für dritte wichtig ist
Bitte warten ..
Mitglied: Biber
27.01.2011 um 20:57 Uhr
Moin N4pst3r,

na gut...der l33t-Nickname war auch nur das i-Tüpfelchen.
Schwerer im Magen liegt mir das, was du in Punkt drei versuchst zu entkräften...
Gerade wenn "es nicht schwer zu lösen ist" , dann wäre eigentlich das erhoffte Verhalten,
  • sich einmal bei den o.a. Elementarbefehlen etwas schlauer zu lesen
  • eventuell mal so ein, zwei Beiträge über Rumalbern mit FOR/F-Anweisungen hier im Forum querzulesen
  • und auch mal solche abgelutschten Notnägel wie "Forumssuche" oder "Suchmaschinenbefragung" anzutesten.

Andererseits...
Was soll ich hier jeden gatesverdammten Tach gegen die rauschende Brandung ansingen...?

Mein proof-of-concept am CMD-Prompt wäre dieser hier
(For /f %i in ('dir /b /a:d') do @set "alldirs=!alldirs!;%i" ) & for /f "delims=!; tokens=2*" %i in ('set alldirs') do set alldirs=%j
--> dieser würde bei mir, bei drei vorhandenden Unterverzeichnissen die Variable %alldirs% so setzen:
set alldirs=$home;$logs;logs
Bei mir ist der CMD standardmäßig mit DelayedExpansion gestartet, du kannst das Ergebnis reproduzieren,
wenn du an deinem CMD-Prompt eine neue Instanz der Cmd.exe öffnest mit "cmd /V:on /k" (siehe "Cmd/?")

Von der Mimik ist nur erhaltenswert in einem Batch:
  • außen herum (ganz links beginnend) ist eine FOR /F-Anweisung.
  • Die holt von einer DIR-Anweisung nur die Unterverzeichnisse und mit Parameter /b relativ schnörkellos. Siehe DIR /? . Das Ergebnis entspricht formal deiner "test.txt".
  • damit wird gesetzt die Variable %alldirs% und zwar deren !aktuellster_berechenbarer_Wert! plus der nächste Token %i =verzeichnisname
  • da beim ersten Mal noch keine Variable !alldirs! vorhanden ist, sieht die gesetze Variable %alldirs% dann so aus
 set alldirs=!alldirs!;$home;$logs;logs
  • dieses "!alldirs!;" am Beginn der Liste schneide ich mit der rechtesten FOR/F-Anweisung wieder weg.

Soweit die Skizze, die dir alle nötigen nuts and bolts griffbereit hinlegt.

In einem Batch muss jede Schleifenvariable %i als %%i geschrieben werden - mehr sollte nicht an Info nötig sein.

Wenn du nicht weiter kommst, melde dich.

Grüße
Biber
Bitte warten ..
Mitglied: pieh-ejdsch
27.01.2011 um 21:00 Uhr
moin,

das mit der lösung C ist weil in der Batch die schönste Zeile Überhaupt fehlt
setlocal
näheres gib es dazu bei Wie Arbeite ich mit Batch UmgebungsVariablen? Erstellung Umgang Erweiterungen Veränderungen
Die CMD ist offen und der Batch wird ausgefüht. In die Variable a wird die letzte Zeile geschrieben.
wird der Batch nochmal ausgeführt wird in die Variable a der Inhalt der Variable a und die Letzte Zeile geschrieben. usw...

das eine Prozentzeichen nach dem set ist Überflüssig es wird im Batch nicht aufgelöst. Das kommt aber nur daher, weil es eine Variable "a=" nicht geben kann. wenn das = nicht wäre würde versucht werden die Variable a aufzulösen.

auf drei wegen kommst Du zu Deiner gesamtZeilen-Zeile:
in einer Forschleife kannst Du nicht mit Einfacher Darstellung der Variable diese ständig Verändern. Dazu musst Du entweder die Variable in einem
Call set "Variable=%%Variable%%%%x;"
neusetzen oder vor/in der Schleife "setlocal enabledelayedexpansion" benutzen
  • in der Forschleife angeschalten muss es auch in der Forschleife wieder ausgeschalten werden, was eine Verschachtelte Forschleife vorraussetzt, welche die !UmgebungsVariable! in dieser an eine ForVariable gibt und vor dem neusetzen der UmgebungsVariable mit zuhilfename der Forvariable, das entsprechende "endlocal" eingestreut wird.

Gruß Phil
Bitte warten ..
Mitglied: N4pst3r
27.01.2011 um 21:32 Uhr
Hi

Ich danke vielmals.
Über For-Schleifen habe ich mich schon informiert. for /? habe ich ebenfalls schon zuvor aufgerufen, mich im Internet umgesehen und bin auch öfters auf diese Seite gestoßen. Ich fand Eure Beiträge sehr schlüssig deswegen habe ich mich hier auf die schnelle gemeldet.
Ich werde mich denn nun noch über die neuen von Euch genannten Begriffe informieren und hoffentlich meine Batch beenden. Mal schauen wo's mich hinführt.
Nochmals danke ++
Bitte warten ..
Mitglied: Skyemugen
27.01.2011 um 21:41 Uhr
Aloha Biber,

[OT]
auch wenn das heute schon der dritte Offtopic-Beitrag von mir ist aber ...

*lmfao* Ich hab mich weggeschmissen vor Lachen, einfach klasse (Lösung C) - du hast heute irgendwie deinen crazy-day, oder? Fiel mir vorhin schon auf. ;)

Ob ich jetzt noch ruhig zum Einschlafen komme, mit dem Spruch die ganze Zeit im Hinterkopf *lach* ...
[/OT]

lachende Grüße

André
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
VB for Applications
gelöst Datei mit variablem Namen einlesen und als Excel speichern (1)

Frage von Anrion zum Thema VB for Applications ...

VB for Applications
gelöst VBA-Makro verschwindet nach Speichern (5)

Frage von lupi1989 zum Thema VB for Applications ...

Microsoft Office
gelöst Dropdownlisten in Abhängigkeit mit Leerzeichen im Namen (Datenüberprüfung) (2)

Frage von kevische zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...