2012-01-19 154 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