我知道如何在 /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
據我所知 cmd.exe 不提供現成的函數來執行函數的評估。
如果您只是想再等待 1 秒,只需在其中插入另一個 ping -n 2 127.0.0.1 即可。
您可以考慮從以下位置安裝 sleep 命令Windows 伺服器管理工具。
安裝 cygwin/powershell 怎麼樣?
編輯:修正我的 ping 參數愚蠢之處