chipchamp12
Goto Top

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!

Content-ID: 107445

Url: https://administrator.de/forum/batch-startet-zufallsdatei-107445.html

Ausgedruckt am: 23.12.2024 um 11:12 Uhr

60730
60730 28.01.2009 um 22:06:00 Uhr
Goto Top
Salü mit ü.

  • 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ß
Chipchamp12
Chipchamp12 28.01.2009 um 22:15:14 Uhr
Goto Top
Okay, dass hier ist das "Programm". Es soll zum helfen von Vokabeln dienen.

@echo off
:startofthefile
cls
echo.
echo Dies ist ihre Vokabellernhilfe!
echo Sie konnen mit diesem Programm Vokabeln eingeben und abfragen.
echo Bitte melden Sie sich mit ihren Benutzerdaten an.
echo Hinweis! Wenn Sie keinen Account haben, tippen sie "new" ein.

set /p name= Bitte melden Sie sich an:
if exist %name%1.txt goto log
if %name%==new goto :new


:new
echo.
echo Sie konnen nun einen neuen Benutzer erstellen.
echo Bitte tippen Sie ihren gewunschten Benutzernamen ein!
set /p newname= Ihr neuer Name:
if not exist %newname%1.txt goto allk
pause > nul
:allk
echo %newname% > %newname%1.txt
echo.
echo Bitte tippen Sie ihren gewunschtes Passwort ein!
set /p newpass= Ihr Passwort:
echo %newpass% > %newpass%.txt
pause > nul
echo.
echo Die Daten wurden gespeichert.
set /p d1= < %newname%1.txt
echo Ihr Name ist: %d1%
set /p d2= < %newpass%.txt
echo Ihr Passwort ist: %d2%
echo.
echo Die Einstellung ist abgeschlossen.
echo Starten Sie das Programm nun neu.
pause > nul
exit

:log
set /p nowpass= Bitte geben Sie Ihr Password ein:
if exist %nowpass%.txt goto correctlogin
:correctlogin
cls
echo.
echo Willkommen in Ihrem Vokabelaccount!
echo Sie konnen nun Vokabeln eingeben, oder Abfragen.
echo Tippen Sie nun Abfrage ein, um Ihre Vokabeln abzufragen.
echo Tippen Sie nun Eingabe ein, um Vokabeln einzugeben.
set /p chose= Was wollen Sie heute machen:
if %chose%==Abfrage goto abfrage
if %chose%==Eingabe goto eingabe
if %chose%==ABFRAGE goto abfrage
if %chose%==EINGABE goto eingabe
if %chose%==abfrage goto abfrage
if %chose%==eingabe goto eingabe
if not %chose%==eingabe goto false
if not %chose%==Eingabe goto false
if not %chose%==EINGABE goto false
if not %chose%==abfrage goto false
if not %chose%==ABFRAGE goto false
if not %chose%==Abfrage goto false

:false
echo.
echo Die Eingabe enthielt einen Fehler, bitte versuchen Sie es erneut
pause > nul
goto log

:eingabe
echo.
echo Sie können nun Vokabeln eingeben.
echo Bitte schreiben Sie erst das Bekannte,
echo dann die korrekte Antwort.
md Vokabelnvon%name%
cd Vokabelnvon%name%
cls
set /p frag= Bekannt:
echo %frag% > %frag%.txt
set /p antw= Antwort:
echo %antw% > %frag%1.txt
pause

:abfrage
cd Vokabelnvon%name%
set /p abfragevon = < gehen.txt
echo %abfragevon% = ?
set /p meinung =
set /p ant = < gehen1.txt
IF %meinung% == %ant% GOTO :WAHR
REM hier landet man wenn der if-Ausdruck falsch ist
GOTO WEITER
:WAHR
REM hier landet man wenn der if-Ausdruck wahr ist
echo Willkommen Zuhause
REM Jetzt wird der if Zweig verlassen
pause

:WEITER
echo.Have a nice Day!
pause

:comend
echo Das Programm wird nun beendet!
pause > nul


Soweit klappt alles, außer die Abfrage ( zu finden unter :abfrage)!
Dort soll durch zufall eine der vorher eingegebenen Dateien geöffnet werden und die Antwort (Vokabel dann eine 1 und dann .txt) die richtige Lösung sein.
Wo ich Probleme habe?
Dabei, durch zufall eine der Vokabeln durch zufal als Frage einzugeben und die richtige Antwort zuzuweisen!
bastla
bastla 28.01.2009 um 22:17:12 Uhr
Goto Top
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:
@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
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
echo %Zuletzt%>Zuletzt.txt
zwischenspeichern und mit
set /p "Zuletzt=<Zuletzt.txt"
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]
Chipchamp12
Chipchamp12 28.01.2009 um 22:29:34 Uhr
Goto Top
Bastla,
es soll aber nicht dieselbe Datei mehrmals abgefragt werden, sondern immer eine neue und die bereits abgefragten sollen nicht doppelt abgefragt werden.
Zudem muss man, wenn man die Datei "Beispiel"1.txt als Vokabel hat, als Antwort beispiel angeben!
Die Datei Beispiel1.txt hat als korrekte Antwort Beispiel.txt!
bastla
bastla 28.01.2009 um 22:35:10 Uhr
Goto Top
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
Chipchamp12
Chipchamp12 28.01.2009 um 22:38:40 Uhr
Goto Top
Der Eintrag sollte eigentlich verständlich sein!
Ggf. liegt es an dir.
Probier mal den Batch Code oben aus, dann solltest du verstehen, was ich meine.
60730
60730 28.01.2009 um 22:58:48 Uhr
Goto Top
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