Batch | Passworteingabe mit Sternchen

Palladin007

assimiliert
So, wer unbedingt eine versteckte Passworteingabe mit Sternchen haben will, so wie ich :)D), der kann das nehmen:

Code:
@echo off
setlocal EnableDelayedExpansion
ver | findstr /i "6\." > nul
If NOT "%ERRORLEVEL%"=="0" (
   echo.
   echo Dieses Script funktioniert nur unter Windows Vista und hoeher.
   ping -n 2 127.0.0.1 > nul
   exit /b
)
set stern=Bitte geben sie das Passwort ein: 
set chars=_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890
set k=0
:pw
choice /c !chars:~1,62! /cs /n /m "!stern!"
if %k%==0 set k=1 & set stern=
If "%errorlevel%"=="62" goto weiter
set pw=!pw!!chars:~%errorlevel%,1!
set stern=!stern!*
cls
goto pw
:weiter
cls
echo %pw%
pause

Kurze Infos zum Programm:
  • Es funktionieren alle Zeichen von A bis Z in groß und klein und alle Ziffern, bis auf die 0
  • Lerschritte, Sonderzeichen, Umlaute und andere Zeichen sind nicht möglich. Nur die oben genannten Zeichen können verwendet werden
  • Die 0 ist für die Bestätigung reserviert. Die Eingabe wird also mit 0 beendet
  • Das Programm ist auf Windwos 7 getestet und funktioniert nur auf Windows 7 und Vista. Bei älteren Versionen wird das Programm beendet.



Edit:
Die Passwort-Eingabe ist überarbeitet und nun kleiner.
Die Funktionsweise ist die selbe.
 
Zuletzt bearbeitet:
Funktioniert nicht auf meinem System.

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

D:\>choice
Der Befehl "choice" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

EDIT:
BTW: Ich HASSE Spaghetticode. Nicht nur weil es unangenehm zu lesen, sondern auch unnötig zu arbeiten ist.

Schau dir mal das an. Ich kanns wie gesagt nicht testen, aber er sollte funktionieren:
Code:
@echo off
setlocal EnableDelayedExpansion
set stern=Bitte geben sie das Passwort ein: 
set chars=_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890
:pw
choice /c !chars:~1,62! /cs /n /m "!stern!"
If NOT "!stern:~1,1!" == "*" set stern=
for /L %%i in (1,1,62) do (
	If "%errorlevel%"=="%%i" (
		set pw=!pw!!chars:~%errorlevel%,1!
		set stern=!stern!*
		cls
		goto pw
	)
	goto weiter
)
:weiter
cls
echo. %pw%
pause

So hätte man 1 Variable und diverse Codezeilen weniger. Is dafür halt etwas komplexer. Es ginge noch einfacher, aber leider unterstützt %comspec% keine umwandlung von Nummern in ASCII Zeichen (CHR())
 
Zuletzt bearbeitet:
Klar, so kann man es auch machen.

Was ich da geschrieben habe, war auch nur eine flüchtige Idee aus dem Unterricht^^

Und schließlich gibt es dieses Forum, um Ideen zu erweitern und zu verbessern, oder?



Werd dein Programm Zuhause dann mal testen und wenn ich noch ne Idee zum Verbessern habe, werd ich das auch gleich tun^^
 
Ach so, na dann.
I.ü. is bei genauerer Denkweise die Schleife unnötig.

Code:
@echo off
setlocal EnableDelayedExpansion
set stern=Bitte geben sie das Passwort ein: 
set chars=_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890
:pw
choice /c !chars:~1,62! /cs /n /m "!stern!"
If NOT "!stern:~1,1!" == "*" set stern=
If "%errorlevel%"=="62" goto weiter
set pw=!pw!!chars:~%errorlevel%,1!
set stern=!stern!*
cls
goto pw
:weiter
cls
echo. %pw%
pause
 
Also, dein erstes Programm habe ich getestet und zwar mit den Buchstaben a und s

a ging, allerdings gab es kein Sternchen, nur eine lehre Zeile.
Bei s ging es aus. Kein Fehler, es geht aus.

Dein zweites Programm funktioniert.
Es gibt aber zwei Probleme.
1. Es wird immer nur ein Stern angezeigt und das kann man vermutlich nur mit einer Schleife lösen.
2. Es steht am Anfang immer ein Lehrzeichen. Wenn die Passwortkontrolle das mit beachtet, gibt es Probleme. Eine einfache if-Kontrolle ist also nicht möglich, außer das erste Zeichen wird entfernt.

Werd mal schauen, wie sich das zweite Programm verbessern lässt und dann oben rein stellen.


Edit:
Beide Probleme sind geklärt.


Aber noch eine Frage: Warum hast du ganz unten das geschrieben?
echo. %pw%
???
Der Punkt ist irgendwie fehl am Platz^^
 
Zuletzt bearbeitet:
Aber noch eine Frage: Warum hast du ganz unten das geschrieben?
echo. %pw%
???
Der Punkt ist irgendwie fehl am Platz^^
Der Punkt hat durchaus seine berechtigung.

Als ich dein erstes Script probiert hab, hat er choice nicht gefunden, daher ist er gleich weiter zu der :weiter marke gesprungen.
Die Variable %pw% war leer, also wurde der Befehl echo ohne parameter (text) ausgeführt.
So ist immer die Meldung gekommen
ECHO ist ausgeschaltet (OFF).
und durch den Punkt wird halt in diesem Fall auf jeden Fall eine leere Zeile geschrieben statt dem Echo-Reply...
 
Achso

Schon doof, dass es den Befehl bei xp nicht gibt.

Werd oben noch dazu schreiben, dass es nur ab Windows Vista (?) und Windows 7 geht.


PS: Das hier ist die erste Seite, die eine Passwort-Eingabe mit Sternchen im Internet anbietet^^
Hab ja vorher schon ne ganze Menge rum gegooglet und nix gefunden^^
Ist auf jeden Fall nicht schlecht für das Image vom Forum^^
 
Brauchst nicht dazuschreiben, eine einfache If-Abfrage reicht da schon.
Code:
ver | findstr /i "6\." > nul
If NOT "%ERRORLEVEL%"=="0" (
   echo.
   echo Dieses Script funktioniert nur unter Windows Vista und h”her.
   exit /b
)
 
Das muss doch nicht dazu.


Es geht nur um das Programm an sich.

Deswegen halt noch die Info, dass es nur unter Win7 und Vista läuft.

Wer das nicht hat, wird das dann sehen^^
 
Liest du jedes mal ob ein Programm für das OS geeignet ist, oder vertraust du darauf das die Softwareschreiber das Programm angepasst haben?

IMHO isses toll wenn das Programm mir sagt dass es nicht dafür geeignet ist, und dann abbricht bevor ich was installiere was entweder nicht funktioniert oder systemdateien beschädigt weil es das unter einem anderen OS machen soll...
jm2c
 
Nagut, tu ich nicht xD

Aber ich glaube, wenn jemand programmiert, dann sollte man sich be Programm-Vorschlägen auch mehr damit beschäftigen^^

Aber für dich baue ich es gerne ein^^ :p
 
Eine Hilfe für deinen Programmierstil, Palladin:

Er ist grausam! Wenn du einen Fehler im Programm suchen willst, wirst du bei deinem "Spaghetti-Code" (danke Razorblade für den Ausdruck ;)(y)) ziemlich lange für die Fehlersuche brauchen.

Überlege dir deine eigenen Merkmale, z. B.
Soll jeder Befehl klein oder groß geschrieben werden, also entweder IF, if, If oder If, aber nicht
Code:
IF blablabla
if blablalba
.
Raste ich den Code ein oder kann alles untereinander stehen?
Füge ich zu eigenen Hilfe Kommentare dazu oder muss ich mir den Code in zwei Jahren wieder selbst durchkauen?
etc.

Das hilft ungemein! Wenn ich alles so wie du schreiben würde, hätte ich bis heute kein komplexes und FUNKTIONIERENDES Programm auf die Reihe bekommen!

Denk darüber nach!

Gruß
bastla
 
Ja, hab ich schon^^
Mit groß und klein, ok, das mag ich nicht. Keine Ahnung, wie so^^

Einrücken zu ich bei if und als Merkmale nehme ich die Sprungmarken und goto Befehle.

Ich such die einfach mit STRG+F

Und da ich die bei größeren Programmen so gestalte, dass man allein im Namen die Funktion danach sieht, geht das ganz gut^^


PS: Bei größeren Programmen teile ich das Programm in einzelne "Dateien" auf. Die existieren dann aber nur ganz vorne im Namen der Sprungmarke mit diesem Datei-Namen.
Aber diese Programmteile halte ich dann auch alle offensichtlich getrennt von einander
 
Oben