Batch startet Zufallsdatei
Hallo, ich möchte, dass eine Batch eine zufällige .txt Datei startet.
Es sind viele .txt Dateien mit unterschiedlichen Namen in einem Ordner!
Die Batch soll nun eine zufällige der vielen txt Dateien in die Batch einfügen!
Also
set /p variable= < zufällige.txt
Es sollte möglichst ein und-die-selbe Datei nicht mehrmals nacheinander gestarted werden!
Oder wenigstens min. 5 oder 6 andere vorher!
Es sind viele .txt Dateien mit unterschiedlichen Namen in einem Ordner!
Die Batch soll nun eine zufällige der vielen txt Dateien in die Batch einfügen!
Also
set /p variable= < zufällige.txt
Es sollte möglichst ein und-die-selbe Datei nicht mehrmals nacheinander gestarted werden!
Oder wenigstens min. 5 oder 6 andere vorher!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 107445
Url: https://administrator.de/forum/batch-startet-zufallsdatei-107445.html
Ausgedruckt am: 23.12.2024 um 11:12 Uhr
7 Kommentare
Neuester Kommentar
Salü mit ü.
"Zufallszahlen" kannst du anhand von Time /t in den Millisekunden finden.
sorry, aber irgendwie fühl ich mich nicht angespornt - oder wie es ein Mitstreiter im Forum so treffend formuliert hat:
Gruß
- eine Batch soll eine .txt starten?
- aber seit wann sind .txt Dateien ausführbare (startfähige) Programme?
- Seit wann ist das /p hinter Set bei dir std. und was hat das mit dem "Problem" zu tun?
- Und warum ist bei dir nach jeder Zeile dieses Zeichen! und bei mir dieses?
"Zufallszahlen" kannst du anhand von Time /t in den Millisekunden finden.
sorry, aber irgendwie fühl ich mich nicht angespornt - oder wie es ein Mitstreiter im Forum so treffend formuliert hat:
Warum sollte ich mir Mühe geben, wenn du es nicht macht?
Gruß
Hallo Chipchamp12!
Der Frage nach dem "!" am Ende Deiner Sätze schließe ich mich an ...
Ansonsten: Da ich nicht weiß, wie der Ablauf konkret aussehen soll, einfach einmal ein Entwurf, mit dem 10 Mal eine Datei (bzw genauer: deren erste Zeile) in die Variable %variable% eingelesen wird, wobeim wie gewünscht, zumindest 6 andere Dateien zwischendurch verwendet werden müssen:
Wenn Dir das Zeichen "§" nicht sympathisch sein sollte, such Dir ein anderes aus (wobei dieses nicht in Deinen Dateinamen vorkommen bzw als Sonderzeichen für Batch oder "findstr" verwendet werden darf).
Die von mir zum Testen verwendeten "echo"-Zeilen 13 und 16 kannst Du natürlich, wenn es soweit klappt, entfernen.
Grüße
bastla
[Edit]
@Chipchamp12: Deinen Entwurf habe ich zu spät gesehen ...
Wenn die Liste der zuletzt verwendeten Dateien zwischen einzelnen Batchläufen gespeichert werden soll, einfach per
zwischenspeichern und mit
beim nächsten Mal wieder einlesen.
Soferne sich die Anzahl bzw Reihenfolge der Dateien zwischenzeitlich nicht verändert hat, sollte das einigermaßen passen ...
[/Edit]
Der Frage nach dem "!" am Ende Deiner Sätze schließe ich mich an ...
Ansonsten: Da ich nicht weiß, wie der Ablauf konkret aussehen soll, einfach einmal ein Entwurf, mit dem 10 Mal eine Datei (bzw genauer: deren erste Zeile) in die Variable %variable% eingelesen wird, wobeim wie gewünscht, zumindest 6 andere Dateien zwischendurch verwendet werden müssen:
@echo off & setlocal
set "Ordner=D:\Dein Ordner"
set "Liste=%temp%\Inhalt.txt"
set "Zuletzt=§ § § § § § §"
dir /b "%Ordner%\*.txt"|findstr /n "^">"%Liste%"
for /f "usebackq delims=:" %%i in ("%Liste%") do set /a Anzahl=%%i
set /a Zaehler=0
:Loop
set /a Nr=%Random%%%%Anzahl%+1
echo %Nr%__%Zuletzt%
echo %Zuletzt%|findstr /c:"§%Nr%§">nul && goto :Loop
for /f "tokens=1* delims=:" %%i in ('findstr /b "%Nr%:" "%Liste%"') do set "Datei=%%j"
echo "%Datei%"
set /p variable=<"%Ordner%\%Datei%"
for /f "tokens=2-6 delims=§" %%a in ("%Zuletzt%") do set "Zuletzt=§%%a§%%b§%%c§%%d§%%e§%Nr%§"
set /a Zaehler+=1
if %Zaehler% lss 10 goto :Loop
Die von mir zum Testen verwendeten "echo"-Zeilen 13 und 16 kannst Du natürlich, wenn es soweit klappt, entfernen.
Grüße
bastla
[Edit]
@Chipchamp12: Deinen Entwurf habe ich zu spät gesehen ...
Wenn die Liste der zuletzt verwendeten Dateien zwischen einzelnen Batchläufen gespeichert werden soll, einfach per
echo %Zuletzt%>Zuletzt.txt
set /p "Zuletzt=<Zuletzt.txt"
Soferne sich die Anzahl bzw Reihenfolge der Dateien zwischenzeitlich nicht verändert hat, sollte das einigermaßen passen ...
[/Edit]
Hallo Chipchamp12!
Da ich heute ohnehin keine Zeit mehr habe, kannst Du (was mich betrifft) in aller Ruhe ev meinen Entwurf testen (nur, um den Ablauf vielleicht nachvollziehen zu können), Deinen obigen Kommentar nochmals überdenken und dann vielleicht so formulieren, dass einigermaßen klar ist, was Du tatsächlich meinst ...
Grüße
bastla
Da ich heute ohnehin keine Zeit mehr habe, kannst Du (was mich betrifft) in aller Ruhe ev meinen Entwurf testen (nur, um den Ablauf vielleicht nachvollziehen zu können), Deinen obigen Kommentar nochmals überdenken und dann vielleicht so formulieren, dass einigermaßen klar ist, was Du tatsächlich meinst ...
Grüße
bastla
Lieber ChimpChamp,
gib dochmal if /? ein eine DosBox deines Vertrauens ein.
Entdecke dabei evtl. den Schalter /i und kürze deine choose - Schoose.
Es zeugt von sehr viel Hartnäckigkeit oder unwissen, dieses angemahnte Zeichen "!" immer noch an (nun nur noch jedes 3.) Satzende zu setzen.
Aber als Krönung dann auch noch den doppelten (gut gemeinten) anderen Tipp zu ignorieren und Meister Bastla ein "gg. liegt es an dir" vor den Latz zu knallen - sorry aber irgendwann ist das Fass voll.
Ich behaupte mal, von den 3 Schreiberlingen, die sich in diesem Thread verewigt haben, bist du garantiert nicht derjenige, der anderen vorwerfen kann - etwas verständliches nicht zu verstehen.
Roger Over Ende Out
Mit freundlichen Grüßen Ihne ihrn
Dr. Med. Wurst
gib dochmal if /? ein eine DosBox deines Vertrauens ein.
Entdecke dabei evtl. den Schalter /i und kürze deine choose - Schoose.
Es zeugt von sehr viel Hartnäckigkeit oder unwissen, dieses angemahnte Zeichen "!" immer noch an (nun nur noch jedes 3.) Satzende zu setzen.
Aber als Krönung dann auch noch den doppelten (gut gemeinten) anderen Tipp zu ignorieren und Meister Bastla ein "gg. liegt es an dir" vor den Latz zu knallen - sorry aber irgendwann ist das Fass voll.
Ich behaupte mal, von den 3 Schreiberlingen, die sich in diesem Thread verewigt haben, bist du garantiert nicht derjenige, der anderen vorwerfen kann - etwas verständliches nicht zu verstehen.
Roger Over Ende Out
Mit freundlichen Grüßen Ihne ihrn
Dr. Med. Wurst