2012-01-19 156 views
96

在Unix中,我们可以把多个命令在一行是这样的:在Windows批处理文件一行多个命令

$ date ; ls -l ; date 

我想在Windows类似的事情:

> echo %TIME% ; dir ; echo %TIME 

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

我该如何做到这一点?

+3

的可能的复制[?如何在Windows CMD一条线运行两个命令(http://stackoverflow.com/questions/ 8055371/how-to-run-two-command-in-one-line-in-windows-cmd) – IvanRF

回答

155

使用:

echo %time% & dir & echo %time% 

这一点,从存储器,相当于分号分隔在bash等UNIXy壳。

还有&&(或||)只执行,如果第一个成功(或失败)的第二个命令,但单符号&是你在找什么在这里。


但是,由于环境变量往往会在读取而不是执行时进行评估,因此很可能会给您同样的时间。

你可以避开这个问题通过打开延迟扩展:

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 
+0

感谢您的回答。问题是部分工作。第一个和最后一个%时间%打印的时间相同,即使命令(中间)至少需要40秒才能完成(我运行脚本而不是dir命令) – Raghuram

+1

这是因为当命令是_read_而评估环境变量时比执行。我会更新答案。 – paxdiablo

+0

仍然问题依然存在。该脚本以代码1退出。但第二个echo仍然同时打印请参见此操作12:57:56.93 3个线程正在运行时退出线程。 12:57:56.93 – Raghuram