演算を行い、それを次のコマンドに渡す

演算を行い、それを次のコマンドに渡す

/bin/sh でこれを行う方法はわかっていますが、Windows では少し苦労しています。

32ビット符号付き整数の演算は次のように実行できることは知っています。

SET /a 2+2
4

しかし、これを次のコマンドに渡すにはどうすればよいのでしょうか? たとえば、実行したい処理は次のとおりです。

Windows のコンシューマー エディションには、ネイティブの自動スリープ機能はありません (確か)。スリープを実行する最善の方法は、スイッチPINGと組み合わせて使用​​して-n、指定した秒数から 1 秒を引いたスリープ時間を取得することです。次のコマンドは、サイレント スリープに有効です。

PING localhost -n 3 > NUL

しかし、これをスリープコマンドにエイリアスしたいのです。コマンドの後にスリープしたい秒数を実際に入力できるようにしたいのですが、今は次のようにできます。

DOSKEY SLEEP=PING 127.0.0.1 -n $1 > NUL

これは機能しますが、常に入力より 1 秒短くなるため、1 秒間スリープしたい場合は、 コマンドを使用する必要がありますSLEEP 2。これは必ずしも理想的ではありません。

Windows で の演算結果$1+1を次のコマンドに渡す方法はありますか? STDOUT を使用する方法があると思いますが...

答え1

これを試してみてください:

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

$Tと同等のコマンド区切り文字です&

> NULはマクロではなくの出力をリダイレクトすることに注意してくださいDOSKEY。 を実行すると が含まれていないことがわかりますDOSKEY /MACROS。必要なリダイレクトを行うには、$G NUL上記のように行の末尾に を追加します。

次のような方法も有効です:

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

両方を試してみて、どちらが自分に適しているかを確認してください。

答え2

  1. 私の知る限り、cmd.exe は関数の実行中の評価にすぐに利用できる機能を提供していません。

  2. もう 1 秒だけ待機したい場合は、もう一度 ping -n 2 127.0.0.1 を挿入するだけです。

  3. スリープコマンドのインストールは、Windows サーバー管理ツール

  4. cygwin/powershell のインストールはどうでしょうか?

編集: 私のpingパラメータの愚かさを修正してください

関連情報