進行算術運算並將其傳遞給下一個命令

進行算術運算並將其傳遞給下一個命令

我知道如何在 /bin/sh 中執行此操作,但在 Windows 中我有點困難。

我知道你可以對 32 位元有符號整數進行算術運算

SET /a 2+2
4

但是我如何將其傳遞給下一個命令呢?例如,我要執行的流程如下。

Windows 的消費者版本沒有本機自動睡眠功能(我相信?) - 執行睡眠的最佳方法是PING-n開關結合使用以獲得那麼多秒(減去一秒)的睡眠時間。以下命令對於靜默睡眠有效:

PING localhost -n 3 > NUL

但我想將其別名為睡眠命令。我想讓它變得優雅,以便您在命令後輸入您想要睡眠的實際秒數,現在我可以做

DOSKEY SLEEP=PING 127.0.0.1 -n $1 > NUL

這是可行的,但它總是比您的輸入少 1 秒,因此如果您想休眠一秒鐘,則必須使用該命令SLEEP 2。這並不完全理想。

有什麼方法可以讓我傳遞 的算術$1+1並將其傳遞給 Windows 中的下一個命令嗎?我假設有某種方法可以使用 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. 您可以考慮從以下位置安裝 sleep 命令Windows 伺服器管理工具

  4. 安裝 cygwin/powershell 怎麼樣?

編輯:修正我的 ping 參數愚蠢之處

相關內容