进行算术运算并将其传递给下一个命令

进行算术运算并将其传递给下一个命令

我知道如何在 /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. 您可以考虑从Windows 服务器管理工​​具

  4. 如何安装 cygwin/powershell?

编辑:纠正我的 ping 参数错误

相关内容