Arithmetik durchführen und an den nächsten Befehl weitergeben

Arithmetik durchführen und an den nächsten Befehl weitergeben

Ich weiß, wie das in /bin/sh geht, aber unter Windows habe ich ein paar Schwierigkeiten.

Ich weiß, dass man Arithmetik mit 32-Bit-Integern mit Vorzeichen durchführen kann mit

SET /a 2+2
4

Aber wie übergebe ich dies an den nächsten Befehl? Der Vorgang, den ich ausführen möchte, ist beispielsweise wie folgt.

Consumer-Editionen von Windows haben keine native automatische Ruhezustandsfunktion (glaube ich?) - die beste Möglichkeit, einen Ruhezustand zu erreichen, besteht darin, ihn PINGin Verbindung mit dem -nSchalter zu verwenden, um so viele Sekunden minus eine Ruhezeit zu erhalten. Der folgende Befehl ist für einen stillen Ruhezustand wirksam:

PING localhost -n 3 > NUL

Aber ich möchte dies in einen Schlafbefehl umwandeln. Ich hätte es gerne elegant, sodass Sie die tatsächliche Anzahl der Sekunden eingeben, die Sie nach dem Befehl schlafen möchten. Im Moment kann ich Folgendes tun:

DOSKEY SLEEP=PING 127.0.0.1 -n $1 > NUL

Das funktioniert, ist aber immer 1 Sekunde kürzer als Ihre Eingabe. Wenn Sie also eine Sekunde lang schlafen möchten, müssen Sie den Befehl verwenden SLEEP 2. Das ist nicht gerade ideal.

Gibt es für mich eine Möglichkeit, die Arithmetik zu übergeben $1+1und sie an den nächsten Befehl in Windows weiterzugeben? Ich gehe davon aus, dass es eine Möglichkeit gibt, STDOUT zu verwenden ...

Antwort1

Probieren Sie Folgendes aus:

DOSKEY SLEEP==set /a t=$1+1 $G NULL $T PING 127.0.0.1 -n %t% $G NULL

Dies $Tist ein Befehlstrennzeichen, das dem entspricht &.

Beachten Sie, dass die > NULAusgabe von umgeleitet wird DOSKEYund nicht das Makro. Sie können sehen, dass es nicht eingeschlossen ist, wenn Sie dies tun DOSKEY /MACROS. Um die gewünschte Umleitung durchzuführen, fügen Sie $G NULwie oben gezeigt an das Ende der Zeile an.

So etwas wie das hier wird auch funktionieren:

DOSKEY SLEEP=for /f %t in ('set /a $1+1') do @PING 127.0.0.1 -n %t $G NUL

Probieren Sie beides aus und finden Sie heraus, was für Sie besser funktioniert.

Antwort2

  1. Soweit ich weiß, bietet cmd.exe keine sofort verfügbare Funktion zur Auswertung von Funktionen während der Ausführung.

  2. Wenn Sie nur noch 1 Sekunde warten möchten, fügen Sie einfach einen weiteren Ping -n 2 127.0.0.1 ein.

  3. Sie können die Installation des Sleep-Befehls über dasTools zur Windows Server-Verwaltung.

  4. Wie wäre es mit einer Installation von Cygwin/Powershell?

EDIT: korrigiere die Dummheit meiner Ping-Parameter

verwandte Informationen