Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Tastaturcodeabfrage in einer Batch-Datei !

xlh / 12 Antworten / Baumansicht Nickles

Hallo Leute,


also als erstes möchte ich ganz kurz darauf hinweisen, das es in diesen Thread eigentlich um 2 Dinge geht, die in einer Batch-Datei ablaufen sollen. Nur wenn ich dieses als Betreff angegeben hätte, hätte ich schon alleine, ein 5 Zeilen Betreff gehabt und dann hat man ja auch keine Lust mehr sich das überhaupt noch durch zu lesen.


Nun denn, ... dann fange ich mal an. Ich habe ein riesen großes Problem und zwar geht es darum das ich gerne eine Batch-Datei schreiben möchte, die sobald ich sie starte, mir erstmal anzeigt was alles für Festplatten in dem Computer vorhanden sind, so zusagen eine Ansicht, wie als ob ich "dir c:\" eingeben würde, nur halt nicht die Übersicht von den Ordnern in der Festplatte "xxx", sondern eine schöne Ansicht, mit den ganzen Festplatten. Danach soll sie mich fragen auf welche Festplatte, ich zugreifen will (z.B. C:\ ; D:\ ; usw.) und das ich dann, den Laufwerksbuchstaben angebe und mit der Eingabetaste bestätige, ohne das er aber die Batch-Datei abbricht oder stoppt. Die Batchdatei soll nur, warten bis ich z.B. C:\ eigegeben habe, auf das laufwerk C:\ dann auch wechseln soll und das sie dann mit ihren eigentlichen Aufgaben weiter machen soll, sobald ich die Abfrage (C:\) mit der Eingabetaste bestätigt habe. Sobald ich dann die Abfrage bestätigt habe, soll die Batch-Datei, mir dann eine Übersicht geben, was in der Festplatte als Inhalt vorhanden ist und mich dann fragen soll, in welchen Ordner ich wechseln möchte und wieder auf die Eingabetaste wartet, bis ich den Ordner "xxx" angegeben habe und bestätigt habe und dann wieder erst dann mit ihrer eigentlichen Aufgabe weiter macht ohne Abbruch oder Stop der Batch-Datei. Sie soll danach, dann natürlich auch dort ins Verzeichnis wechseln.


So, sobald ich dann die Festplatte und danach den Ordner angegeben habe, soll sie mit einer " IF exist" Abfrage, schauen ob auf der Festplatte und in dem Ordner den ich angegeben habe, die Datei : x:\xxx\0001\0002\xyz.dat existiert oder nicht. Wenn ja dann soll sie zur Sprungmarke " :Weiter " wechseln und die nächste Aufgabe machen, wenn nicht soll sie zur Sprungmarke " :Abbruch " gehen.


SO, ... mein Problem ist das ich das irgendwie überhaupt nicht hinkriege, eine Batch zu programmieren, die mir eine Komplett-Übersicht über die Festplatten gibt und die mich fragt auf welche Festplatte ich will und dann sobald ich den Laufwerksbuchstaben angegeben habe und ich die Eingabetaste drücke mit ihrer nächsten Aufgabe weiter macht. So bald ich dieses versuche steht dann da nur: c:\ im DOS und macht bei Druck auf die Eingabetaste nicht weiter mit der Batch. Ich habe aber mal was gelesen das es eine " IF ReadKey=#" Abfrage gibt oder so ähnlich. Habe schon alles durch gegooglet, aber kam nie zu Recht mit den Ergebnissen, weil Sie entweder nur für Turbo Pascal waren oder irgend eine andere sch...sse geliefert haben. Sorry für den Ausdruck aber, ich bin echt so langsam verzweifelt.


Aber irgendwie muss es doch möglich sein das ich die Tastatureingabe abfrage und auf die Abfrage eine Reaktion bekomme. Tastaturcode-Tabelle habe ich schon (ASCII Werte in HEX und DEZ)


Ich poste mal was ich bisher schon geschaft habe ( ich weiss, ist nicht sehr viel, weil ich auch noch relativ NEU auf dem Gebiet der Batch-Programmierung bin, möcht aber unbedingt diese Sprache lernen und nicht Turbo Pascal oder anderes, auch wenn diese Sprachen mehr können) :


 


@echo off


cls


echo.


echo -------------------------------------------------------------------------------------------


echo -------------------------------------------------------------------------------------------


echo.


echo - "xxx File Archiver System" -


echo.


echo ------------------------------------------------------------------------------------------


echo -----------------------------------------------------------------------------------------


echo.


echo.


pause


cls


c:


dir /p


cd xxx


if exist \0001\0002\xyz.dat goto weiter


if not exist \0001\0002\xyz.dat goto abbruch


:weiter


cd \0001\0002


a:\rar.exe a -m5 c:\xyz.dat xyz.dat


cls


copy c:\xyz.dat a:\xyz.dat


cls


echo.


echo Archivierung wurde erfolgreich abgeschlossen !


:abbruch


cls


echo Archivierung ist fehlgeschlagen !


 


bei der Zeile " if exist \0001\0002\xyz.dat goto weiter " macht er aber irgenwie nichts, obwohl der Ordner existiert mit dieser Datei.


Er springt dann zu den Befehl " if not exist \0001\0002\xyz.dat goto abbruch ".


Warum?


Ich kann ja nicht den genauen Pfad eingeben, weil der Pfad bis zu einen gewissen Grad unbekannt ist, bzw variieren kann.


Geht ja wohl schlecht das ich den Pfad in der Batch mit " if exist c:\0000\\0001\0002\xyz.dat goto weiter " vorher schon festlege, wenn ich " d:\ " und dann den Ordner " 0003 " ausgewählt habe und in Wirklichkeit dort der Ordner und die Datei liegt.


Deswegen auch nur " if exist \0001\0002\xyz.dat goto weiter ", weil er vorher dann schon in den variierenden übergeordneten Ordner rein geht! Ich dachte wenn ich dann schon im


Ordner X:\xxx\ schon drin sei, das er das dann annehmen würde.


Ich weiss da wird noch einiges an Arbeit auf mich zu kommen und es wird noch einiges falsch an der Batch sein, aber egal ich bin dafür bereit.


Also, jetzt liegt es an euch. Ich komme echt nicht mehr weiter. Ich bitte euch bitte hilft mir, es wäre super wichtig. Falls es nicht anders geht als wie irgenlweche Programme unter DOS zu benutzen um manche Befehle abarbeiten zu können, ist nicht schlimm, hauptsache ist das es bei der Batch-Sprache bleibt und nicht bitte zu sagen, das ich versuchen soll Turbo-Pascal oder ähnliches zu erlernen. Ich will es auf jedenfall auf dem Wege der normalen Batch-Sprache schaffen.


Naja dann hör ich jetzt mal auf zu schreiben, der Thread ist sowieso schon lang genug,


Vielen Dank im voraus schon mal.


PS: Falls noch fragen sind, bin ganz Ohr, ich erwarte ja nicht sofort eine Lösung.


Aber trotzdem schon mal danke.


 


 

bei Antwort benachrichtigen
xlh Nachtrag zu: „Tastaturcodeabfrage in einer Batch-Datei !“
Optionen

Oh sorry, is wohl was schief gegangen mit den Abständen zwischen den Zeilen.

bei Antwort benachrichtigen
Borlander xlh „Oh sorry, is wohl was schief gegangen mit den Abständen zwischen den Zeilen.“
Optionen

Hast Du den IE6 Posting-Editor (bei dem müsste oben eine Format-Symbolleiste zu sehen sein) verwendet? In diesem Fall erzeugt ein Enter nämlich 2 Zeilenumbrüche - mit Shift+Enter kannst Du einfache Zeilenumbrüche erzeugen...

bei Antwort benachrichtigen
Borlander xlh „Tastaturcodeabfrage in einer Batch-Datei !“
Optionen

Gleich vorneweg - ich hab Deinen Thread nur einmal quergelesen...

Was Du leider nicht schreibst: Muß die Batch auf Systemen mit DOS-Basis (Win95/98/ME) laufen oder reichen Systeme mit NT-Basis (NT/2K/XP)?

Hintergrund - die cmd von NT-Systemen bietet einige deutlich mächtigere Befehle / Befehlsoptionen...

Ich hab eben mal ein wenig experimentiert - ich habe mit der cmd keine Weg gefunden die vorhandenen LWs zu prüfen ohne das W2K eine modales FehlerFenster geöffnet falls kein Medium in CD-LWs oder WechselDatenträger-LWs ausgegeben hat...

Momant: dir n:\ hat kein Fehlerfenster zur Folge und gibt auch noch einen brauchbaren %errorlevel% zurück (0 im Erfolgsfall, 1 bei nicht existierende LWs oder nicht eingelegten Medien) - ob das ganze auch unter DOS so läuft müsste man ggf. prüfen.
Die 24 abfragen müsstest Du dann alle einzeln aufführen aber das sollte kein Problem darstellen ;-)

Zur Eingabeproblematik:
Bei NT-Systemen: set /p ...
Bei DOS-Systemen ist mir keine eingebaute Lösung bekannt - da müsste man dann ggf. auf externe Tools zurückgreifen um die Eingabe in eine Variable zu schreiben...


Gruß
Borlander

bei Antwort benachrichtigen
xlh Nachtrag zu: „Tastaturcodeabfrage in einer Batch-Datei !“
Optionen

Hi,
ja habe den IE 6 benutzt! Und auf deine Frage zurück zukommen, ich brauche nicht nur eine Batch die unter DOS-Basis (Win95/98/ME) läuft, sondern die unter purem 16-Bit DOS, von einer Startdiskette laufen muss. Und um Wechseldatenträger geht es ja nicht, sondern darum das ich diese Diskette auf verschiedenen Rechnern ausführen muss, aber die vorher übergeordneten Ordner und Festplatten nicht immer gleich sind. Das heisst dass von dieser Zeile hier: X:\xxx\0001\0002\xyz.dat , X:\xxx variieren kann und das nur: \0001\0002\xyz.dat , also die untergeordneten Ordner immer gleich sind. Beispielsweise es würde hier darum gehen auf welcher Partition und in welchem Ordner Awendungen (also wie der Ordner Programme unter C:\) installiert sind und in diesem Ordner wo die Anwendungen sind, ist die Datei "xyz.dat" in 2 Unterordnern namens ...\0001\0002\, also X:\xxx\0001\002\xyz.dat, weil die 2 Unterordner sind nicht immer auf der gleichen Partiton und auch nicht immer im gleichen übergeordneten Ordner.

Aber ich glaube ich habe dich irgendwie nicht so richtig verstanden, bin halt absoluter Newbie, sorry, ich glaube du hast doch irgendwie recht. ;-) Falls es nicht zu sehr mühe macht bitte erklär mal genauer, wäre dir sehr dankbar.

Aber trotzdem Danke.

Gruß
xLh

bei Antwort benachrichtigen
Borlander xlh „Hi, ja habe den IE 6 benutzt! Und auf deine Frage zurück zukommen, ich brauche...“
Optionen

Halölo xLh

Und um Wechseldatenträger geht es ja nicht
Um Wechseldatenträger geht es hier zumindest auch in sofern das selbige LWs evtl. im System verbaut sind - wenn Du allerdings nur von einer nackten DOS-Diskette ohne spezielle Treiber bootest sollten die eigentlich gar nicht erst erkannt werden...

X:\xxx variieren kann und das nur: \0001\0002\xyz.dat , also die untergeordneten Ordner immer gleich sind.
Also das sieht mir danach aus als bräuchtest Du zumindest ein Zusatzprogramme was Eingaben entgegen nehmen und in eine Variable schreien kann...
Falls das Prüfen auf vorhandene LWs mit dir... nicht funktioniert könntest Du es nochmal mit if exist x:\. versuchen - und dem ggf. gleich mit echo die passende Taste für die zur Beantwortung der Fehlermeldung übergeben. Falls das nicht funktioniert benötigst Du auch dafür ein Zusatzprogramm...

(Die Eingabe könnte man evtl. auch mit (Q)Basic einlesen)



Gruß
Borlander

bei Antwort benachrichtigen
xlh Nachtrag zu: „Tastaturcodeabfrage in einer Batch-Datei !“
Optionen

Hallo Borlander,

Ich habe vor ein paar Tagen mal ein Prog im Netz gefunden, das sich INPUT nennt.
Dieses kann eine Eingabe entgegen nehmen und in eine Variable schreiben/umwandeln. Habe es aber nur zum Teil geschafft mit dem Prog, umzugehen. Habe es soweit geschaftt das es eine Eingabe annimmt, aber nicht in eine passende Variable umwandelt oder wenn es überhaupt in eine umgewandelt wird.
Eine Anleitung ist wohl dabei, aber erstens super KURZ gefasst, meiner Meinung nach, und in Englisch. Mein Nachteil ist in dem Fall erstens, das ich noch Newbie bin und mehr detaillierte Anleitungen brauche und zweitens das auch Englisch mir in manch Begriffen nicht so sehr liegt.

Leider kann man hier keine Datei-anhänge machen und die URL weiss ich auch nicht mehr, schade, sonst hätte ich dich gefragt ob du dir das Programm mal anschauen kannst und mir vielleicht sagen kannst wie ich es bediene.
Oder kannst du mir vielleicht mal deine Mail nennen, dann könnt ich es dir schicken.

Und was das mit der Auflistung der Festplatten angeht, das ich eine Gesamt-Übersicht der Festplatten kriege, so wichtig ist das auch nicht, ich werde zwar noch nicht aufgeben und weiter im netz nach einer Lösung suchen, aber es geht auch ohne. Aber wenn ich eine Lösung gefunden habe, sage ich dir bescheid, schätze mal das es für dich vielleicht auch interessant wäre oder?

Ok, dann... nochmal danke.

Gruß xLh

bei Antwort benachrichtigen
Borlander xlh „Hallo Borlander, Ich habe vor ein paar Tagen mal ein Prog im Netz gefunden, das...“
Optionen

Hallo xLh

Ich habe vor ein paar Tagen mal ein Prog im Netz gefunden, das sich INPUT nennt. [...] die URL weiss ich auch nicht mehr
Schau mal in Deiner Browser-History (beim IE Verlauf) nach der Seite. Ansonsten ist es aber auch recht weit verbreitet das der Autor seinen Namen im Programm (ruf das Programm mal mit dem Parameter /? auf - dann wirst Du vermutlich eine kurze Hilfe bekommen in der auch der Autor zu finden sein könnte) oder einer beiligenden ReadMe-Datei hinterlässt...

Auflistung der Festplatten angeht
Funktioniert die von mir angedachte Lösung nicht? Eigentlich sollte sie...
if exist n:\. (echo n) else (echo -)
gibt ein n aus falls n existiert und ein - falls n nicht existiert (in dem Fall könnte man auch einfach gar nichts ausgeben lassen...)


Gruß
Borlander

bei Antwort benachrichtigen
xlh Nachtrag zu: „Tastaturcodeabfrage in einer Batch-Datei !“
Optionen

Ja danke,
funktioniert schon, aber nur halbwegs.

if exist c:\ funzt aber die diese {} Zeichen dürfen nicht dabei sein. Und was hat das mit " else " auf sich. Wenn ich if exist C:\ echo C else echo - schreibe, gibt er mir als echo dieses aus: c else echo - .

Ich habe die Adresse wieder gefunden hier ist sie:

http://www.grex.org/~ekrause/BOOTDISK.html

oder der direkte Link:

ftp://garbo.uwasa.fi/pc/batchutil/input.zip


Vielleicht kannste dir ja mal das Prog anschauen und mir erklären wie ich es bedienen muss. Also ich habe es soweit geschafft, das er mir die Möglichkeit gibt, das ich was eingeben kann, aber irgendwie will er mir das nicht so richtig in eine Variable umwandeln.

Danke im voraus
Gruß xLh


bei Antwort benachrichtigen
Borlander xlh „Ja danke, funktioniert schon, aber nur halbwegs. if exist c: funzt aber die...“
Optionen
if exist c:\ funzt
:-)

aber die diese {} Zeichen dürfen nicht dabei sein. Und was hat das mit " else " auf sich. Wenn ich if exist C:\ echo C else echo - schreibe, gibt er mir als echo dieses aus: c else echo - .
Daran das eine Klammerung auch nur bei NT-Systemen/CMD mölich sein könnte hatte ich gar nicht gedacht - nimm einfach:


if exist c:\. echo c
...
if exist z:\. echo z


Ich habe die Adresse wieder gefunden
Ich schau mir das mal an wenn ich ein bisschen Zeit habe - ob heute kann ich allerdings noch nicht garantieren...


Gruß
Borlander
bei Antwort benachrichtigen
xlh Borlander „ :- Daran das eine Klammerung auch nur bei NT-Systemen/CMD mölich sein könnte...“
Optionen

Jo dann ist gut Danke!
Gruß xLh

bei Antwort benachrichtigen
xlh Nachtrag zu: „Tastaturcodeabfrage in einer Batch-Datei !“
Optionen

Habe jetzt rausgefunden, wie das Programm funktioniert. Dadurch das es ein ziemlich altes ist (von 1986), funktioniert es nicht mit der DOS-Version von XP. Bei NT weiss ich nicht oder W2K, aber daher das ich sowieso eine Windows-ME Startdiskette, benötige um ein anderes Programm nutzen zu können, funktioniert es auch richtig. Den NTFS4DOS laüft unter der XP Startdiskette nicht. Zeigt mir an: Falsche DOS-Version. Ja und das DOS der ME Diskette, ist wohl anscheinend noch alt genug, damit das Programm läuft. Unter dem DOS von XP oder der XP Diskette, sieht es zwar so aus, das er das Programm richtig startet, aber er meine Eingabe nicht in eine Variable umwandelt, umwandeln kann oder das DOS von XP die Variable nicht annimmt.

Also, brauchst du dir das Prog nicht mehr anschauen. Aber trotzdem ein ganz dickes DANKE für die gesamte, Hilfe und das du so viel Geduld mit mir hattest.
Ich glaube ohne dich würde ich heute noch zum Teil an manch Schwierigkeiten hängen bleiben, wie das mit der Abfrage aller Festplatten und der Auflistung dieser.

Ok,... dann nochmal danke,
Gruß xLh

PS.: Ich glaube zwar das du doch eher mehr Kenntnisse als ich hast, aber falls du doch mal nicht was wissen solltest, vielleicht kann ich dir dann da ja in der Sache weiter helfen.

bei Antwort benachrichtigen
Borlander xlh „Habe jetzt rausgefunden, wie das Programm funktioniert. Dadurch das es ein...“
Optionen

Danke für Deine ausführlche Rückmeldung :-)

Gruß
Borlander

bei Antwort benachrichtigen