在 Windows 批处理文件中的一行上执行多个命令

在 Unix 中,我们可以像下面这样在一行中放入多个命令:

$ date ; ls -l ; date

I tried a similar thing in Windows:

 > echo %TIME% ; dir ; echo %TIME

但是它打印了时间,并且没有执行命令 dir

我怎么才能做到呢?

166959 次浏览

用途:

echo %time% & dir & echo %time%

从内存来看,这相当于 bash和其他 UNIXy shell 中的分号分隔符。

还有 &&(或 ||) ,它只在第一个命令成功(或失败)时执行第二个命令,但是这里要查找的是单个与号 &


然而,这可能会给您相同的时间,因为环境变量倾向于在读取而不是执行时进行计算。

你可以通过启用延迟扩张来解决这个问题:

pax> cmd /v:on /c "echo !time! & ping 127.0.0.1 >nul: & echo !time!"
15:23:36.77
15:23:39.85

That's needed from the command line. If you're doing this inside a script, you can just use setlocal:

@setlocal enableextensions enabledelayedexpansion
@echo off
echo !time! & ping 127.0.0.1 >nul: & echo !time!
endlocal

也可以用 编剧实现

ScriptRunner.exe -appvscript demoA.cmd arg1 arg2 -appvscriptrunnerparameters -wait -timeout=30 -rollbackonerror -appvscript demoB.ps1 arg3 arg4 -appvscriptrunnerparameters -wait -timeout=30

它还具有一些特性,如回滚、超时和等待。