2012-06-21 30 views
0

我正在使用Windows命令行腳本。我想要做的是執行由另一個命令「B」生成的命令「A」作爲它的輸出,我也可能想要在執行之前首先檢查命令是否存在。有人在這裏知道如何做到這一點? 在此先感謝!如何執行由cmd上的其他程序生成的命令?

+0

試試這個命令行幫助頁面[Windows命令](http://ss64.com/nt/),我想'CALL'會幫助你。 –

回答

1
a.exe > tmp.cmd 
CALL tmp.cmd 
+0

如果你解釋它正在做什麼,這將是一個更好的答案,以便人們在以後的搜索中找到它可以理解它。 –

1

的經典方法是做你的輸出重定向到一個腳本文件作爲Eugen Rieck suggested。可以通過寫入臨時文件夾並在完成時刪除臨時腳本來改進它。我將一個隨機數字併入臨時腳本名稱,以減少腳本的兩個同時發生的實例不會干擾彼此。

@echo off 
setlocal 
set script="%temp%\temp%random%.bat" 
commandA >%script% 
call %script% 
del %script% 

您的commandA可能不會產生任何輸出。執行一個空腳本不會導致任何錯誤。但是,如果你願意,你可以檢測腳本是空的通過如下:

for %%A in (%script%) do if %%~zA equ 0 echo The script is empty. 

該腳本可以使用多個命令來構建:

commandA >%script% 
commandB >>%script% 
commandC >>%script% 

或更有效地爲:

>%script% (
    commandA 
    commandB 
    commandC 
) 

非經典方法是將命令存儲在變量中而不是腳本文件中,然後將擴展值作爲宏執行。宏的執行可能比執行腳本快得多,因爲它全部是基於內存的。但是,構建一個功能宏的規則比建立腳本更復雜。此外,宏的最大長度限制爲8191個字符(字節) - 批處理環境變量的最大長度。

甚至可以創建一個接受參數和返回值的宏!

大量的工作已經在DOSTips站點的批量宏中完成。這裏有兩個重要的參考,如果你有興趣嘗試出來:

http://www.dostips.com/forum/viewtopic.php?p=7330一個良好的開端,顯示了概念的發展,以及許多關鍵零部件

http://www.dostips.com/forum/viewtopic.php?p=11344的有很多的最新和最偉大與參數

0

一個簡單的方法應該在大多數情況下的宏改進語法是:

for /F "tokens=*" %%i in ('a.exe') do %%i 

for /F "tokens=*" %%i in ('a.exe') do if "%%i" NEQ "" %%i