Batch-Skript: Datei schreiben

sarius99

Cadet 2nd Year
Registriert
Juni 2019
Beiträge
22
Hallo,

ich habe eine Frage zu einem Batch-Srkipt und hoffe sehr dass mir jemand weiterhelfen kann :)

Es geht um folgendes. Ich möchte ein Skript schreiben, dass mir eine Textdatei erzeugt (genauer gesagt .dat, aber das spielt keine Rolle) mit vielen einzelnen Datensätzen.
Ein Datensatz besteht aus einem String und einer Variable. Der String ist immer der gleiche und die Variable ändert sich. Die Variable ist eine Nummer, genauer gesagt sind es tausende Nummern, die nacheinander ausgegeben werden sollen.

Sprich der Output soll sein:

Ich bin ein String: 62719
Ich bin ein String: 12948
Ich bin ein String: 91282
....

Aktuell habe ich aber nur folgendes hinbekommen:

Ich bin ein String:
Ich bin ein String:
Ich bin ein String:

Nun frage ich mich, wie ich es schaffe, dass ich immer eine andere Nummer ausgeben kann. Wie setzt man das um? Wo soll ich die Nummern speichern (direkt im Skript oder aus einer anderen Datei lesen?) Etc.

Falls sich jemand auskennt, wäre ich sehr dankbar um jede Antwort :)

EDIT: Wie gewünscht:


Bash:
@echo off

set "i=0"
set "a=0"

set /P a=Bitte geben sie ein, wie viele Test-Datensaetze sie generieren wollen:
set /a a-=1

:Loop
echo hier einfach der string und dann dahinter die sich ändernde Variable (das was ich nicht verstehe)

if %i% GEQ %a% (
pause
exit
)

set /a i+=1
goto loop
 

Anhänge

  • bild.png
    bild.png
    20 KB · Aufrufe: 259
Zuletzt bearbeitet:
Und vor allem könnte man den Text des Batches einfach in ein Codetag verpackt im Post wiedergeben. Ein buntes Bildchen ist dabei nämlich sicher nicht hilfreich.
 
  • Gefällt mir
Reaktionen: mae1cum77
madmax2010 schrieb:
Ich bin auf der Windows commandline selten unterwegs, aber das hier schaut gut aus: https://stackoverflow.com/questions/3097044/batch-echo-or-variable-not-working/3097080
Ich schau's mir mal an, danke!
Ergänzung ()

mae1cum77 schrieb:
Um helfen zu können, müßte klar sein, wo die Stringdaten herkommen. Werden die von irgeneinem Prozess generiert? Deine Aussage dazu ist reichlich diffus.
Die String-Daten sind irrelevant, diese stehen direkt hinter dem "echo" und sind immer identisch. Deshalb ist mir nicht schlüssig weshalb du das wissen musst. Und wenn doch, dann wie gesagt: Die stehen einfach als String hinter dem echo. Keine Variable, nichts besonderes, einfach direkt hinter dem Echo.

Mir geht es um den Teil mit der Variable. Falls noch was "diffus" ist, einfach sagen.
 
  • Gefällt mir
Reaktionen: mae1cum77
Naja, der link behandelt einen 'dummen' Syntaxfehler. Das hier gezeigte Skript beinhaltet momentan nur eine GOTO schleife mit Zähler.

Um eine Textdatei zu parsen bietet sich eher ein for /f loop an. Der läuft so oft wie Einträge vorhanden sind, ohne die zählen zu müssen ;).
Ergänzung ()

sarius99 schrieb:
Mir geht es um den Teil mit der Variable. Falls noch was "diffus" ist, einfach sagen.
Mein Fehler, ich meinte genau die Variable und deren Herkunft. Ohne das Wissen ist es schwer zu helfen.
 
Hi,
wenn du Zufallszahlen generieren möchtest, versuche es so:
Code:
@echo off & setlocal EnableDelayedExpansion

set /a "min=5000"
set /a "max=9000"

set /a "ausgabe=!RANDOM! * (%max% - %min% + 1) / 32768 + %min%"

echo !ausgabe!
Den Rest über eine For Schleife packen...
 
mae1cum77 schrieb:
Mein Fehler, ich meinte genau die Variable und deren Herkunft. Ohne das Wissen ist es schwer zu helfen.
Entilzha schrieb:
Hi,
wenn du Zufallszahlen generieren möchtest, versuche es so:

Erstmal danke für eure Beteiligung, freut mich wirklich sehr, dass hier so viele helfen wollen! :)

Zu euren Kommentaren:
Bei diesen Daten handelt es sich um 8-stellige Nummern, die Aktuell in einem Textdokument aufgelistet sind. In jeder Zeile dieser .txt-Datei steht eine solche Nummer. Mehr ist es eigentlich nicht.
Ergänzung ()

areiland schrieb:
Und vor allem könnte man den Text des Batches einfach in ein Codetag verpackt im Post wiedergeben. Ein buntes Bildchen ist dabei nämlich sicher nicht hilfreich.
Ist erledigt!
 
Dann ist die Schleife unnötig.

Code:
@echo off & setlocal EnableDelayedExpansion

for /f "tokens=1 delims= " %%a in ('type "variable.txt"') do (
    echo Ich bin ein String: %%a
    echo Ich bin ein String: %%a>>ergebnis.dat
)
pause
endlocal
exit

variable.txt beinhaltet die Variablen die mit deinem String (Text anpassen) in die neue ergebnis.dat geschrieben werden. Beide Dateien im selben Ordner wie das Skript, sond Pfade anpassen.

Momentan zeigt das Skript an und schreibt in die Datei, pausiert dann, wartet auf Input (Anykey). Einfach die Zeile löschen/auskommentieren, wenn nicht gebraucht.
 
  • Gefällt mir
Reaktionen: sarius99 und areiland
mae1cum77 schrieb:
Dann ist die Schleife unnötig.

Code:
@echo off & setlocal EnableDelayedExpansion

for /f "tokens=1 delims= " %%a in ('type "variable.txt"') do (
    echo Ich bin ein String: %%a
    echo Ich bin ein String: %%a>>ergebnis.dat
)
pause
endlocal
exit

variable.txt beinhaltet die Variablen die mit deinem String (Text anpassen) in die neue ergebnis.dat geschrieben werden. Beide Dateien im selben Ordner wie das Skript, sond Pfade anpassen.

Momentan zeigt das Skript an und schreibt in die Datei, pausiert dann, wartet auf Input (Anykey). Einfach die Zeile löschen/auskommentieren, wenn nicht gebraucht.


Spitze! Vielen Dank :) Freut mich sehr dass mir hier so schnell geholfen wurde, das ist genau dass was ich gesucht habe! Endlich kann ich weiter machen, und falls irgendwann noch ein Problem auftauchen sollte, weiß ich wo ich mich melde ;)

Besten Dank, auch an den Rest!
 
  • Gefällt mir
Reaktionen: mae1cum77
Kleine Fingerübung aus der kalten Hüfte :). Benutze solche kleinen Skripte gerne um die Erstellung von Textdatenbanken zu automatisieren. Wer will schon 1000e Einträge manuell bearbeiten.
 
  • Gefällt mir
Reaktionen: sarius99
mae1cum77 schrieb:
Kleine Fingerübung aus der kalten Hüfte :). Benutze solche kleinen Skripte gerne um die Erstellung von Textdatenbanken zu automatisieren. Wer will schon 1000e Einträge manuell bearbeiten.

Respekt! :D Ja, das ist in solchen Szenarien von Vorteil. sonst hätte ich auch mehrere tausende Zeichen abtippen dürfen...
Ergänzung ()

mae1cum77 schrieb:
Kleine Fingerübung aus der kalten Hüfte :). Benutze solche kleinen Skripte gerne um die Erstellung von Textdatenbanken zu automatisieren. Wer will schon 1000e Einträge manuell bearbeiten.
Eine Frage habe ich doch noch. Manche der Nummern, die in der Textdatei stehen, beinhalten Leerzeichen. Bei deinem Programm wird aber ab dem Leerzeichen abgeschnitten und deshalb fehlt bei manchen Nummern ein Stück. (6218 81 => 6218)... Weißt du wie ich das anpassen kann?
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: mae1cum77
Den Delimiter anders setzen :).

Code:
@echo off & setlocal EnableDelayedExpansion

for /f "tokens=1 delims=" %%a in ('type "variable.txt"') do (
    echo Ich bin ein String: %%a
    echo Ich bin ein String: %%a>>ergebnis.dat
)
pause
endlocal
exit
 
  • Gefällt mir
Reaktionen: sarius99
mae1cum77 schrieb:
Alles gut, wenn ich mich genervt fühle (was selten passiert) gehe ich offline.

Frag ruhig, wenn noch was ist :).
Alles klar :D
Sollte aber passen, mache gerade einen Testlauf, was bei der Datenmenge nh Weile dauert.. Aber ich denke und hoffe es läuft :)
 
  • Gefällt mir
Reaktionen: mae1cum77
Batch is a bitch. Das Problem ist, dass Variablen standardmäßig nicht immer korrekt zur Laufzeit evaluiert werden - zB innerhalb von Schleifen - sondern einmalig zum Start. Das führt zu solchen Phänomenen, bei denen Variablen sich scheinbar nicht ändern.

Daher liegt der Kern der Lösung bei "setlocal EnableDelayedExpansion" und dem anschließenden Abrufen der Variablen mit !name! (ist bei Schleifenvariablen %%a etc allerdings nicht nötig)

Batch verhält sich dadurch etwas anders als man es von richtigen Skriptsprachen oder gar Hochsprachen kennt. Wie gesagt, batch is a bitch...
 
  • Gefällt mir
Reaktionen: mae1cum77
Raijin schrieb:
Daher liegt der Kern der Lösung bei "setlocal EnableDelayedExpansion" und dem anschließenden Abrufen der Variablen mit !name!
Für Variablen die innerhalb eines Loops erzeugt und genutzt werden, ansonsten die normale Syntax.
 
  • Gefällt mir
Reaktionen: Raijin
Zurück
Oben