我知道如何在 /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 即可。
您可以考虑从Windows 服务器管理工具。
如何安装 cygwin/powershell?
编辑:纠正我的 ping 参数错误