Multiple commands on a single line in a Windows batch file
在UNIX中,我们可以将多个命令放在一行中,如下所示:
我在Windows中尝试过类似的方法:
1
| > echo %TIME% ; dir ; echo %TIME |
但它打印时间,不执行命令dir。
我怎样才能做到这一点?
- 在windows命令中,如何在一行中运行两个命令的可能重复?
用途:
1
| echo %time% & dir & echo %time% |
从内存来看,这相当于bash和其他unixy shell中的分号分隔符。
还有&&(或||),它只在第一个命令成功(或失败)时执行第二个命令,但是单和符和&是您在这里要找的。
不过,这可能会给您相同的时间,因为环境变量往往是在读取时评估的,而不是在执行时。
您可以通过打开延迟扩展来绕过此问题:
1 2 3
| pax> cmd /v:on /c"echo !time! & ping 127.0.0.1 >nul: & echo !time!"
15:23:36.77
15:23:39.85 |
这是命令行所需要的。如果您在脚本中执行此操作,则只需使用setlocal:
1 2 3 4
| @setlocal enableextensions enabledelayedexpansion
@echo off
echo !time! & ping 127.0.0.1 >nul: & echo !time!
endlocal |
- 谢谢你的回答。问题是它只能部分工作。即使命令(在中间)至少需要40秒才能完成,第一个和最后一个%时间%也会同时打印。(我运行脚本而不是dir命令)
- 这是因为环境变量是在读取命令而不是执行命令时计算的。我会更新答案。
- 问题仍然存在。脚本正在退出,代码为1。但是第二个Echo仍然在同一时间打印,请看这个op 12:57:56.93,一个线程在运行3个线程时退出。12:57:56.93
- 我倾向于用time /t(或echo.|time而不是echo %time%来规避这个问题。
- @乔伊,这是可行的,因为它不是一个环境变量。但是你应该使用EDOCX1(3%)time%`-前者是一个有延迟行为的。
- 是的,但是我需要一个新的cmd和/v:on。我很懒惰:P(而且我早就用过timethis这个词了)
- 谢谢Paxdiablo和Joey。我利用了你的两个想法,并能抽出时间
- 在我看到你的答案之前,我写了一个小的批处理文件,比如echo%time%%*echo%time,并将需要用参数作为参数执行的脚本传递给了这个批处理脚本,并获得了所需的输出。
- 知道如何让%ErrorLevel%在以下调用中正确吗?