Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

.bat Aufruf mittels angeschlossenen Taster soll nur genau 1x erfolgen

Frage Entwicklung Batch & Shell

Mitglied: Beatzler

Beatzler (Level 1) - Jetzt verbinden

21.01.2012 um 16:10 Uhr, 3654 Aufrufe, 10 Kommentare

Hey,

ich hab da mal ne kurze Frage.

Habe einen ext. Taster an einem PC angeschlossen. Sobald dieser getastet ist wird eine Batch Datei aufgerufen. Soweit so gut klappt das auch alles.

Die Batch Datei sollte aber nur genau einmal aufgerufen werden. Tastet der Taster nun kommt es vor das die Batch 2-5 mal etc. ( je nachdem wie lange getastet wird ) aufgerufen wird.

Ich habe jetzt versucht das in der Batch selbst so zu lösen:

@ECHO OFF
@rem Unterdrückung mehrerer Aufrufe
IF EXIST c:\Tischtaster\1.txt ( GOTO EXIT) else ( GOTO LOS )

:LOS
ECHO TASTER 1 AKTIV! >> c:\Tischtaster\1.txt

Eigentlicher Inhalt der Batch...

@rem Kurze Pause zum Verhindern mehrfacher Aufrufe
C:\WAIT.EXE\WAIT.EXE -t 6000

:EXIT
DEL c:\Tischtaster\1.txt
EXIT

Das hat schon eine deutliche Verbesserung hervorgerufen jedoch wird jezt immer noch mind. 2 manchmal 3 x die Batch aufgerufen, zu oft

Kennt ihr noch einen anderen, bessern, / schnelleren Trick?

Hab schon überlegt den Prozess abschiessen zu lassen aber das geht ja auch nicht ...

Vielen Dank für einen Tipp !

MFG Beatzler
Mitglied: 68162
21.01.2012 um 16:43 Uhr
Der Taster prellt (mit großer Wahrscheinlichkeit).
HAUPTFRAGE: Was ist "hardwaremässig" zwischen dem Taster und der aufgerufenen Batch-Datei?

Sinnvollerweise sollte entweder der Taster entprellt werden, z.B. mit einem RS-Flip-Flop.
Oder Du löst das über Software, dass z.B. der erste Tastendruck einen Interrupt auslöst und dann weitere "Nachpreller" ignoriert werden. Batch-Prog. dürfte aber dafür zu langsam sein ...

MfG, FM_81
Bitte warten ..
Mitglied: Beatzler
21.01.2012 um 17:41 Uhr
Hey,

danke für die Antwort.

Ja das mit der entprellung würde Sinn machen... Hardwaremäßig kann aufgrund der Bauform aber nichts mehr geändert werden.

Welche Softwaremöglichkeiten gibt es ? Der Taster simuliert mittels USB Anschluss einen Tastendruck der ganz normalen PC Tastatur.

VBSkript?
Bitte warten ..
Mitglied: icsat
21.01.2012 um 18:00 Uhr
Hallo Beatzler,

ich würde wie -FM-81- auch die Ursache in der Hardwareverbindung vor dem Batch sehen. Da ich mich da Hardwaretechnisch gar nich auskenne, kann ich Dir dort auch nicht helfen. Allerdings hätte ich eine Idee, was im Batch etvtl. funktionieren könnte. Versuch doch am Anfang des Batches mal ein Warten mit zufälliger Verzögerung vor der Prüfung, ob der Taster schon gedückt wurde:
01.
C:\WAIT.EXE\WAIT.EXE -t %random% %%100

Gruß icsAT
Bitte warten ..
Mitglied: Beatzler
21.01.2012 um 18:12 Uhr
Hey,

auch solche Ideen hab ich gehofft, sehr cooler Ansatz Jedoch klappt das leider auch noch nicht so ganz... Es werden dann auch wieder mind. 2 Batches komischerweise mit genau der gleichen Wartezeit ( kann ich im CMD Fenster ja sehen welche random Zeit er für diesen Aufruf genommen hat ) gestartet und enden somit ja auch wieder gleichzeitig ..

Kann man das ganze noch irgendwie verfeinern oder die "Random-Wahrscheinlichkeit" erhöhen ? Das ganze sollte aber auch nicht zulange dauern sonst denkt man ja wenn man gedrückt hat das nix passiert ....

Aber die Idee is super

MFG Beatzler
Bitte warten ..
Mitglied: 68162
21.01.2012 um 20:28 Uhr
Zitat von Beatzler:
>Es werden dann auch
wieder mind. 2 Batches komischerweise mit genau der gleichen Wartezeit ( kann ich im CMD Fenster ja sehen welche random Zeit er
für diesen Aufruf genommen hat ) gestartet und enden somit ja auch wieder gleichzeitig ..

Weil der Taster eben in dem Falle zwei Signale kurz hintereinander gesendet hat. Und per Batch darauf zu reagieren ist eben einfach zu langsam; wenn das Ding per USB angeschlossen ist, muss das Schaltsignal ja quasi noch "durch die Verarbeitungsschichten des Betriebssystemes". Hast Du dort die Möglichkeit, Einfluss zu nehmen? (Weil das Ding evtl. eine Tastatur simuliert.)

Eine Idee hätte ich vllt. noch: zu Beginn der Batch kurz warten (Random um ca. 100ms?), dann irgendwie schauen, ob weitere Instanzen der selben Batch laufen, die restlichen alle killen, dann erst weiter machen.

Wenn nicht bleibt m.E. nur der schon genannte Hardwareansatz?

MfG, FM_81
Bitte warten ..
Mitglied: pieh-ejdsch
22.01.2012 um 00:51 Uhr
moin,

wenn ein Handle geöffnet ist kann ein anderes dieses nicht benutzen.
oder wer zuerst kommt malt zuerst
mit der Umleitung >> braucht ein Nachzögling sogar noch länger
01.
@echo off & setlocal 
02.
set /p raus=<testdatei 2>nul 
03.
if defined raus goto :eof 
04.
(for /l %%i in (1,1,100000) do @echo %%i )>testdatei || goto :eof 
05.
:: weiter gehts 
06.
:: und noch weiter 
07.
 
08.
:: Abschluss 
09.
:Loeschversuch 
10.
del testdatei 2>nul ||goto :Loeschversuch
Gruß Phil
Bitte warten ..
Mitglied: Beatzler
22.01.2012 um 15:46 Uhr
Hey,

das ja super genial klappt wunderbar !!!

Vielen lieben dank!!!

Könntest du mir Zeile 4 nochmal genauer erläutern?

Warum (1,1,100000) =?

Vielen Dank! läuft perfekt
Bitte warten ..
Mitglied: pieh-ejdsch
22.01.2012 um 17:44 Uhr
moin Beatzler,

Warum (1,1,100000) =?
Es kann auch schon 10000 ausreichend sein. Wichtig ist nur eine Genügend große Zeitspanne die Testdatei mit einem Handle (Lesgeschützt) zu öffnen.
Es wird jede Zeile eine Ziffer bis N in die Datei eingetragen.

Solange wird jeder weitere Batch (eigentlich schon in Zeile 3 rauzsgeworfen) bis der erste Batch die Datei wieder gelöscht hat.
Zeile 4 ist nur zur Sicherheit, falls der zweite Batch zu schnell (nur ein Zeile) hinterherhinkt, dann schlägt das öffnen der Datei zum reinschreiben Fehl (der erste Batch schreib ja schon hinein) und bei Fehler wird das Goto :eof ausgeführt.

Goto :löschversuch ist eigentlich nutzlos, da die Zeile 3 für Folgende schon lange gegriffen hat.

Gruß Phil
Bitte warten ..
Mitglied: pieh-ejdsch
22.01.2012 um 23:40 Uhr
Falls der Batch sowieso länger benötigt würde der Aufruf der Batch so genügen. Laut Beitrag Titel gefragt.
Da Handle 4 benutzt wird, können trotzdem die Anderen und Fehlermeldungen gelesen oder geloggt werden.
MyBatch.cmd 4>"%temp%\OneBatchOnce"
Eine weitere Ausführung schlägt fehl während der erste Batch noch läuft.

Für Abbruch im Batch sind weitere möglichkeiten:
1. den Batch zuerst und danach eine Zeit sperren
01.
@echo off & setlocal 
02.
 
03.
 :: ein weiterer Batch führt zum Abbruch wärend der 1. Batch in der Klammer ist (OriginalBatch läuft zuerst durch und danch 10 sec Ping) 
04.
05.
call :OriginalBatch 
06.
echo in Zehn sekunden darf der naechste Batch erst. 
07.
ping localhost -n 10 >nul 
08.
) 4>"%temp%\BatchTimer10secMin" || goto :eof 
09.
 
10.
echo ab hier kann ein weiterer Batch von vorn los rennen! 
11.
goto :eof 
12.
 
13.
:OriginalBatch 
14.
Echo Meine Batch Beginnt SOFORT mit der Ausfuerung. 
15.
echo Batch ist fertig
2. zuerst eine Zeitspanne abwarten dann den Batch starten
01.
@echo off & setlocal 
02.
 
03.
:: Variante 1 
04.
 
05.
 :: Für den Abbruch bis zum löschen der TestDatei ( !! TestDatei muss nachher mindestens erstellt werden, 1. Batch läuft nachher Weiter) 
06.
if exist "%temp%\Testdatei" goto :eof 
07.
 
08.
 
09.
:: Variante 2 
10.
 
11.
 :: Für den Abbruch bis die Schleife Fertig ist (1. Batch läuft nachher weiter) 
12.
(for /l %%i in (1,1,100000) do @echo %%i) >"%temp%\Testdatei" 2>nul || goto :eof 
13.
 
14.
echo ab hier kann ohne Variante 1 ein weiterer Batch von vorn los rennen! 
15.
 
16.
 
17.
:: Variante 3 
18.
 
19.
 :: Alternative als Timer (ping) (Batch läuft nachher weiter) 
20.
(echo xxx &ping localhost -n 10 >nul) >"%temp%\Testdatei" 2>nul || goto :eof 
21.
 
22.
echo ab hier kann ohne Variante 1 ein weiterer Batch von vorn los rennen! 
23.
 
24.
 
25.
:: Mein Batch 
26.
Echo Meine Batch beginnt erst SPAETER mit der Ausfuerung 
27.
 
28.
:Loeschversuch 
29.
if exist "%temp%\Testdatei" del "%temp%\Testdatei" 2>nul ||goto :Loeschversuch & :: ohne Variante 1 
30.
echo Batch ist Fertig 
31.
goto :eof
Analog dazu bei 1. Batch: die Zeilen 5 und 6 tauschen:

Und immer daran denken! Geht der eigentliche NutzBatch in die Binsen
Echo ON
einsetzen. Und in einem CMD Fenster ausführen.

Gruß Phil
Bitte warten ..
Mitglied: Beatzler
24.01.2012 um 18:43 Uhr
HEy,

suuuuper! Vielen Dank

Ich bin mit deiner ersten Variante ( 1. Antwort / Lösung ) sehr gut zum Ziel gekommen mittlerweile :

THX!

MFG Beatzler
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
LAN, WAN, Wireless
gelöst 802.1x Authentifizierung - NPS - RADIUS MAC (4)

Frage von LKaderavek zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
802.1x funktioniert nur an einem oder zwei Accesspoints (3)

Frage von westberliner zum Thema LAN, WAN, Wireless ...

Batch & Shell
Mehrere.csv Dateien zusammenfügen zu einer Datei mit bat (4)

Frage von Piotrney zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...