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


111

在Unix中,我们可以将多个命令放在一行中,如下所示:

$ date ; ls -l ; date

我在Windows中尝试了类似的操作:

 > echo %TIME% ; dir ; echo %TIME

但是它打印时间,并且不执行命令dir

我该如何实现?


Answers:


181

用:

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命令)
Raghuram'1

1
这是因为在读取而不是执行命令时会评估环境变量。我将更新答案。
paxdiablo 2012年

问题仍然存在。脚本以代码1退出。但是第二个回显仍在同一时间打印参见此操作12:57:56.93运行3个线程时退出了一个线程。12:57:56.93
拉古拉姆(Raghuram)

3
我倾向于使用time /t(或echo.|time)而不是echo %time%规避问题。
2012年

1
任何想法如何使%errorlevel%在后续通话中正确无误?
BradLaney
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.