【发布时间】:2012-01-19 07:04:18
【问题描述】:
在 Unix 中,我们可以像这样将多个命令放在一行中:
$ date ; ls -l ; date
我在 Windows 中尝试过类似的事情:
> echo %TIME% ; dir ; echo %TIME
但是它打印了时间并且没有执行命令dir。
我怎样才能做到这一点?
【问题讨论】:
标签: windows batch-file
在 Unix 中,我们可以像这样将多个命令放在一行中:
$ date ; ls -l ; date
我在 Windows 中尝试过类似的事情:
> echo %TIME% ; dir ; echo %TIME
但是它打印了时间并且没有执行命令dir。
我怎样才能做到这一点?
【问题讨论】:
标签: windows batch-file
用途:
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
从命令行需要。如果您在脚本中执行此操作,则可以使用 setlocal:
@setlocal enableextensions enabledelayedexpansion
@echo off
echo !time! & ping 127.0.0.1 >nul: & echo !time!
endlocal
【讨论】:
time /t(或echo.|time)而不是echo %time%来规避这个问题。
也可以通过scriptrunner实现
ScriptRunner.exe -appvscript demoA.cmd arg1 arg2 -appvscriptrunnerparameters -wait -timeout=30 -rollbackonerror -appvscript demoB.ps1 arg3 arg4 -appvscriptrunnerparameters -wait -timeout=30
它还具有回滚、超时和等待等功能。
【讨论】: