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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 159614
Url: https://administrator.de/forum/namen-in-variabel-speichern-und-in-einer-zeile-ausgeben-159614.html
Ausgedruckt am: 06.04.2025 um 05:04 Uhr
6 Kommentare
Neuester Kommentar
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:
WTF kommst du auf Lösung C????
Ob das richtig war, erfahren Sie nach der Werbung...
Grüße
Biber
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"
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
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,
Andererseits...
Was soll ich hier jeden gatesverdammten Tach gegen die rauschende Brandung ansingen...?
Mein proof-of-concept am CMD-Prompt wäre dieser hier
--> dieser würde bei mir, bei drei vorhandenden Unterverzeichnissen die Variable %alldirs% so setzen:
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:
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
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
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
moin,
das mit der lösung C ist weil in der Batch die schönste Zeile Überhaupt fehlt
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
Gruß Phil
das mit der lösung C ist weil in der Batch die schönste Zeile Überhaupt fehlt
setlocal
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
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é
[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é