Top-Themen

Aktuelle Themen (A bis Z)

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

In einer batch-Datei einen Befehl mit timeout aufrufen?

Mitglied: AlbertMinrich

AlbertMinrich (Level 2) - Jetzt verbinden

03.03.2014 um 10:12 Uhr, 3529 Aufrufe, 4 Kommentare

Hallo,

gibts eine Möglichkeit, einen beliebigen Befehl mit einem timeout zu starten? Also, wenn der Befehl z.B. nach 10 Sekunden nicht fertig ist, dann soll er abgebrochen werden.

Ganz einfaches Beispiel:
echo Anfang
dir c:\
echo Ende

Wenn der dir-Befehl, aus welchem Grund auch immer, hängen bleibt, wird die batch nie beendet werden, deshalb würde ich ihn gerne so starten, daß er nach 10 Sekunden aufgibt und die batch weiter abgearbeitet wird.

Gibt´s sowas?

Danke
Martin
Mitglied: rubberman
03.03.2014 um 18:32 Uhr
Hallo Martin,

man kann so etwas von einem parallel aufgerufenen Prozess aus machen. Wie genau, richtet sich aber danach, was genau dabei überwacht werden soll. Sollte es sich bei dem Befehl um ein eigenständiges Programm handeln, wird über TASKLIST relativ einfach festzustellen sein, ob das Programm nach 10s noch läuft. Für CMD-interne Befehle (wie DIR) wird das etwas komplizierter und man müsste ein Workaround bauen, das sich nicht mit deinen Ansprüchen beißt.

Gib einfach mal ein paar Informationen mehr, bzw. erzähl am besten um was es dir konkret geht.

Grüße
rubberman
Bitte warten ..
Mitglied: AlbertMinrich
04.03.2014 um 09:18 Uhr
Zitat von rubberman:

Hallo Martin,

man kann so etwas von einem parallel aufgerufenen Prozess aus machen. Wie genau, richtet sich aber danach, was genau dabei
überwacht werden soll. Sollte es sich bei dem Befehl um ein eigenständiges Programm handeln, wird über TASKLIST
relativ einfach festzustellen sein, ob das Programm nach 10s noch läuft. Für CMD-interne Befehle (wie DIR) wird das
etwas komplizierter und man müsste ein Workaround bauen, das sich nicht mit deinen Ansprüchen beißt.

Gib einfach mal ein paar Informationen mehr, bzw. erzähl am besten um was es dir konkret geht.

Es hat mich allgemein interessiert, ob sowas möglich ist. Als konkreten Fall hätte ich aber trotzdem folgendes:
In einer batch werden in einer Schleife mehrere PC´s hintereinander mit psinfo abgefragt. Da kann ich aber nicht über einen parallel aufgerufenen Prozess prüfen, ob nach 10s psinfo noch läuft, weil dann ja vielleicht schon die psinfo-Abfrage für den nächsten oder übernächsten PC durchgeführt wird. Ich müßte also die PID irgendwie mitbekommen. Oder ich kille den Hilfprozess immer zu Beginn der Schleife. Ungefähr so:

call :BeginnSchleife PC1 PC2 PC3
goto :eof
:BeginnSchleife
Hilfsprozess killen
Hilfsprozess starten
psinfo %1
SHIFT
if not (%1) == () goto :BeginnSchleife
Hilfsprozess killen


Geht´s eleganter?
Gruß
Martin
Bitte warten ..
Mitglied: rubberman
04.03.2014 um 19:50 Uhr
Hallo Martin

OK, etwas allgemeingültig, nämlich für separate Programme mit einem eindeutigen Teil in der Kommandozeile des Programms, könnte wie folgt aussehen:

killtimeout.bat
01.
@echo off &setlocal 
02.
set "ProcName=%~1" 
03.
set "CmdLnPart=%~2" 
04.
set "processid=" 
05.
 
06.
>nul timeout /t 10 /nobreak 
07.
 
08.
for /f %%i in ( 
09.
  '2^>nul wmic process where "name='%ProcName%' and commandline like '%%%CmdLnPart%%%'" get processid /value' 
10.
) do for /f %%j in ("%%i") do set "%%j" 
11.
 
12.
if defined processid >nul 2>&1 taskkill /f /pid %processid%

worker.bat
01.
@echo off &setlocal 
02.
 
03.
start "" /b "cmd.exe" /c ""%~dp0killtimeout.bat" "notepad.exe" "killtimeout"" 
04.
notepad.exe killtimeout.bat 
05.
 
06.
pause
Beide Batchdateien liegen im gleichen Verzeichnis.

"worker.bat" wird per Doppelklick gestartet.

Von dort wird zunächst "killtimeout.bat" asynchron mit 2 Parametern gestartet. Der erste Parameter ist der Prozessname des zu überwachenden Programms (hier notepad.exe, stellvertretend für psinfo.exe bei dir). Der zweite Parameter ist ein eindeutiger Teil der Kommandozeile des Programms (hier ist es das Wort "killtimeout", stellvertretend für den PC Name bei dir).
Danach wird notepad.exe mit dem Parameter killtimeout.bat aufgerufen. Zum Verständnis: Das Wort "killtimeout" ist somit Teil der Kommandozeile des Aufrufs von Notepad. (Bei dir wäre es dann PsInfo.exe, wobei der Computername Teil der Kommandozeile wäre.)

Was passiert in der "killtimeout.bat"?
  • 10 s warten
  • WMIC prüft, ob ein Prozess mit dem entsprechenden Name und dem angegebenen Teil der Kommandozeile existiert und gibt die Prozess ID aus.
  • Sollte eine PID ermittelt worden sein, wird der Prozess per TASKKILL beendet.

Ist also nicht besonders kompliziert, oder? Ob es nun elegant ist, liegt im Auge des Betrachters

Grüße
rubberman
Bitte warten ..
Mitglied: AlbertMinrich
07.03.2014 um 12:37 Uhr
Super, funktioniert einwandfrei.

Danke für die Mühe

Gruß
Martin
Bitte warten ..
Ähnliche Inhalte
Windows 7

Batch Datei erzeugt bei jedem Befehl Schleife

gelöst Frage von FrashdWindows 72 Kommentare

Moin, wir haben Windows 7 prof. in einer Domäne. Ich habe eine Batch Datei geschrieben, die die Netzlaufwerke verbindet ...

Batch & Shell

Cmd Befehle in Powershell GUI aufrufen

gelöst Frage von Markus2016Batch & Shell5 Kommentare

Hallo zusammen, ich brauche etwas Hilfe. In meiner erstellten GUI möchte ich ein paar Funktionen mit cmd Befehlen aufrufen. ...

Batch & Shell

Systemelemente per Batch Aufrufen

gelöst Frage von Angelo131095Batch & Shell3 Kommentare

Hallo Leute, Ich habe ein Problem ich habe ein Script geschrieben mit dem ich Systemelemente per Batch ausrufen kann. ...

Batch & Shell

Womit kann ich in einer Batch viertelstündlich eine andere Batch aufrufen?

Frage von red-eyeBatch & Shell16 Kommentare

Hallo allerseits! Seit drei Stunden versuche ich selbst einen geeigneten Befehl zu finden, bzw. hier im Forum eine Antwort ...

Neue Wissensbeiträge
Vmware
VMware Update für den ESXi 5.5 verfügbar
Information von sabines vor 16 StundenVmware

Nach dem ganzen Hickhack um Update mit Microcode Anpassungen und Rückzug, gibt es nun für den ESXi 5.5 ein ...

CPU, RAM, Mainboards

Meltdown und Spectre: Intel zieht Microcode-Updates für Prozessoren zurück

Information von keine-ahnung vor 20 StundenCPU, RAM, Mainboards5 Kommentare

Moin, extrem lutztig. Nur gut, dass ich noch nicht beim Probanden-Bingo mitgemacht habe :-) LG, Thomas

Router & Routing
PfSense als Addon auf QNAP
Information von magicteddy vor 1 TagRouter & Routing7 Kommentare

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 1 TagDatenschutz1 Kommentar

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement26 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Server
TEMP-Profile
gelöst Frage von Forseti2003Windows Server21 Kommentare

Guten Morgen, wer kennt sie nicht, die lieben Temporären Benutzerprofile, vorallem immer dann, wenn man sie am wenigsten braucht. ...

Multimedia & Zubehör
Welches Tablet für die Verkäufer?
Frage von Hendrik2586Multimedia & Zubehör15 Kommentare

Guten Morgen meine Lieben, vielleicht könnt ihr mir ja helfen. Es geht um unsere Außendienstmitarbeiter /Verkäufer. Sie sollen demnächst ...

Ubuntu
Ubuntu - Routing mit 2 Netzwerkkarten?
Frage von gabrixlUbuntu13 Kommentare

Hei Folgende Situation: Ich habe zwei virtuelle Maschinen: 1 - Server für DHCP, DNS und Routing - Netzwerkkarte 1: ...