n4pst3r
Goto Top

Namen in variabel speichern und in einer zeile ausgeben

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

Content-Key: 159614

Url: https://administrator.de/contentid/159614

Printed on: April 18, 2024 at 14:04 o'clock

Member: Biber
Biber Jan 27, 2011 at 19:03:14 (UTC)
Goto Top
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
Member: N4pst3r
N4pst3r Jan 27, 2011 at 19:18:59 (UTC)
Goto Top
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
Member: Biber
Biber Jan 27, 2011 at 19:57:51 (UTC)
Goto Top
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
Member: pieh-ejdsch
pieh-ejdsch Jan 27, 2011 at 20:00:04 (UTC)
Goto Top
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
Member: N4pst3r
N4pst3r Jan 27, 2011 at 20:32:22 (UTC)
Goto Top
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 ++
Member: Skyemugen
Skyemugen Jan 27, 2011 at 20:41:00 (UTC)
Goto Top
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é