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中的分号分隔符。
还有&&(或||),它只在第一个命令成功(或失败)时执行第二个命令,但是单和符和&是您在这里要找的。
不过,这可能会给您相同的时间,因为环境变量往往是在读取时评估的,而不是在执行时。
您可以通过打开延迟扩展来绕过此问题:
| 12
 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:
| 12
 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%在以下调用中正确吗?