Zahl in eine Txt Datei schreiben - Batch

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hey Piuzdorian, der Fehler bedeutet, dass in der Variable kein Wert eingespeichert ist. Deine Methode eine Datei auzulesen funktioniert leider nicht. Wenn du set /a counter=<temp.txt mit dem folgendem Text austauscht sollte dein Programm gehen:

for /f "delims=" %%i in (DATEI_ZUM_AUSLESEN) do set "NAME_DER_VARIABLE=%%i"

DATEI_ZUM_AUSLESEN = Name der Datei, die du auslesen willst NAME_DER_VARIABLE = Name der Variable in die der Inhalt der Datei geschrieben werden soll

Ich hoffe ich konnte dir helfen ;)

IDerAndiI

verreisterNutzer  19.09.2014, 17:36

Hey IDerAndiI, danke für deine schnelle antwort👌... Ich werde es gerade testen. Schade ist das das nicht so einfach geht, sondern so einen langen schwierigen befehl braucht :D danke erst mal werde mich nacher wieder melden. Bist doch der beste. Haste hilfreichste antwort

0
verreisterNutzer  19.09.2014, 17:48

Och mein Gott es klappt DANKE viel mals... Bist du hacker?

0
IDerAndiI  19.09.2014, 17:50

Gerne ;) Ne, ich bin kein Hacker, ich bin 14 und schreib aus Spaß Batch Dateien. :D

Gruß IDerAndiI

0
verreisterNutzer  19.09.2014, 18:59

Lieber IDerAndiI,

Ich habe jetzt das so gemacht wie du. Das funktioniert sehr gut...Danke. Nun habe ich schon weiter probiert und bin jetzt soweit, dass bei falscher eingabe zählt der counter 1 nach oben und speichert das in tmp.txt. das klappt auch. wenn der SPEICHER(tmp.txt) 5 ist, kommt er in den ABschnitt :gesperrt und dort erscheint: Ist gespert und so...

damit man ja das programm nicht beenden kann und dann ist es entsperrt, habe ich am anfang das gemacht:FETTGEDRUCKTER

also es nimmt am anfang mal zuerst die 5 im tmp.txt in die variable %counter% nacher soll es ja schauenb ob sie 5 ist, wenn ja wieder zum abschnitt gesperrt gehen. wenn nein einfach weiter zum login. aber es überspringt mir diesen befehl einfach... Warun?

@echo off

cls

for /f "delims=" %%i in (tmp.txt) do set "counter=%%i"

if "%counter%"=="5" goto gesperrt

:anmeldung

cls

set /p user=Benutzername:

set /p pass=Passwort:

if "%user%"=="root" goto check

goto false

:check

if "%pass%"=="superuser" goto start

goto false *

Endschuldigung für die vielen Fragen, bin leider eine Pfeife was Cmd angeht :D

Lg Piuzdorian

0
IDerAndiI  19.09.2014, 19:06
@verreisterNutzer

Versuch mal nicht if "%counter%"=="5" goto gesperrt sondern ohne die ", also: if %counter%==5 goto gesperrt

Lg IDerAndiI

0
Falsch: set /a counter=<temp.txt
Besser: set /p counter=<temp.txt

Unnötig: if not "%pass%" == "root" goto false
Besser:  goto false

Falsch: echo %counter%>temp.txt
Besser: echo %counter% 1>temp.txt

"exit" zwischen einem GOTO-Befehl und einer Marke ist sinnlos.

Beim ">" kann man steuern, welche Art von Ausgabe man übermitteln will. Normalerweise geht das Programm von normaler Ausgabe aus, was "1>" entspricht. Man kann auch Fehlerausgabe angeben, dann benutzt man "2>".

Weil %counter% eine Zahl ist, versucht das Programm daher einen Ausgabentypen zu übergeben (soweit ich weiß ist alles außer 1 und 2 ungültig, wodurch gar nichts übergeben wird), statt die Zahl selbst zu übergeben.

Ist "%counter%" z.B. "3", versucht CMD bei

echo 3>temp.txt

Ausgabentyp 3 in "temp.txt" zu schreiben. Da es Typ 3 nicht gibt, ist die Datei leer.

Bei "echo 1>temp.txt" würde "ECHO ist ausgeschaltet (OFF)." in die Datei geschrieben werden, da das die normale Ausgabe von "echo " ist.

IDerAndiI  19.09.2014, 18:07

Dann gibts doch noch ne leichte Möglichkeit Dateien auszulesen :) Danke @S1r1us13 , das wusste ich auch noch nicht ;)

0
verreisterNutzer  19.09.2014, 19:07

Danke S1r1us13, Das Mit dem EXIT und dem goto direkt weiss ich, mache dass aber immer aus gewohnheit :D

 Besser: set /p counter=<temp.txt

das funktioniert irgendwie nicht. ist was am code falsch?

@echo off

cls

set /p counter=<tmp.txt

if "%counter%"=="5" goto gesperrt

:anmeldung

cls

set /p user=Benutzername:

set /p pass=Passwort:

if "%user%"=="root" goto check

goto false

:check

if "%pass%"=="superuser" goto start

goto false

:false

cls

set /p counter=%counter%+1

echo "%counter%">tmp.txt

if "%counter%"=="1" set /a sek=30

if "%counter%"=="2" set /a sek=60

if "%counter%"=="3" set /a sek=90

if "%counter%"=="4" set /a sek=120

if "%counter%"=="5" goto end

0
IDerAndiI  19.09.2014, 19:39
@verreisterNutzer

Bei folgenden Zeilen würde ich alle Anführungszeichen (") entfernen: 7 ; 17 ; 23 ; 33-43

Zeile 31: Man rechnet mit set /a x=y+z

Folgende Ziele (goto) fehlen: gesperrt / start / end

01: @echo off

02:

03: cls

04:

05: set /p counter=<tmp.txt

06:

07: if "%counter%"=="5" goto gesperrt

08:

09: :anmeldung

10:

11: cls

12:

13: set /p user=Benutzername:

14:

15: set /p pass=Passwort:

16:

17: if "%user%"=="root" goto check

18:

19: goto false

20:

21: :check

22:

23: if "%pass%"=="superuser" goto start

24:

25: goto false

26:

27: :false

28:

29: cls

30:

31: set /p counter=%counter%+1

32:

33: echo "%counter%">tmp.txt

34:

35: if "%counter%"=="1" set /a sek=30

36:

37: if "%counter%"=="2" set /a sek=60

38:

39: if "%counter%"=="3" set /a sek=90

40:

41: if "%counter%"=="4" set /a sek=120

42:

43: if "%counter%"=="5" goto end

Lg IDerAndiI

0
IDerAndiI  19.09.2014, 19:59
@IDerAndiI

Sry, hab vergessen zu sagen, dass die Zahlen am Anfang jeder Zeile nur eine Denkhilfe sind, also im Programmcode nicht stehen dürfen, weil sonst das Programm nicht funktioniert ;)

Lg IDerAndiI

0
S1r1us13  20.09.2014, 01:07
@verreisterNutzer

Weil du "%counter%" mit Anführungszeichen in tmp.txt schreibst, kommt durch

set /p counter=<tmp.txt

etwas wie "1" mit Anführungszeichen raus. Der darauffolgende IF-Befehl sähe dann so aus:

if ""1""=="5" goto gesperrt

IF wird durch falsche Syntax abstürzen, da zu viele Anführungszeichen genommen wurden. Wenn du die Anführungszeichen im IF-Befehl um %counter% entfernst, dürfte es klappen:

if %counter%=="5" goto gesperrt

Das Problem ist aber, dass du dann nicht +1 rechnen kannst. Daher empfehle ich weiterhin

echo %counter% 1>tmp.txt

Um das Leerzeichen hinter %counter% wegzubekommen, könntest du ganz oben nach dem SET/P-Befehl "set /a counter=%counter%" benutzen.

Beim letzten SET-Befehl musst du übrigens weiterhin /a benutzen: "set /a counter=%counter%+1".

0