【问题标题】:Multiple commands on a single line in a Windows batch fileWindows 批处理文件中单行上的多个命令
【发布时间】:2012-01-19 07:04:18
【问题描述】:

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

$ date ; ls -l ; date

我在 Windows 中尝试过类似的事情:

 > echo %TIME% ; dir ; echo %TIME

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

我怎样才能做到这一点?

【问题讨论】:

标签: windows batch-file


【解决方案1】:

用途:

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

【讨论】:

  • 感谢您的回答。问题是它部分工作。即使命令(中间)至少需要 40 秒才能完成,第一个和最后一个 %time% 也会打印相同的时间。(我运行我的脚本而不是 dir 命令)
  • 这是因为环境变量是在命令读取而不是执行时评估的。我会更新答案。
  • 问题仍然存在。脚本以代码 1 退出。但第二个回显仍然在同一时间打印查看此操作 12:57:56.93 一个线程在 3 个线程正在运行时退出。 12:57:56.93
  • 我倾向于使用time /t(或echo.|time)而不是echo %time%来规避这个问题。
  • 知道如何让 %errorlevel% 在后续调用中正确吗?
【解决方案2】:

也可以通过scriptrunner实现

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

它还具有回滚、超时和等待等功能。

【讨论】:

    猜你喜欢
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 2010-11-29
    相关资源
    最近更新 更多