2011-04-12 41 views
10

現在我有一個批處理作業,我寫了一個調用另一個文件並傳入可執行文件需要運行的變量(密碼和文件名)的批處理作業。批處理目錄中的所有文件

例:

> cd f:\test\utils 
> admin import-xml -Dimport.file=f:\DB\file1.xml -Dadmin.db.password=test123 

我寫了一份工作,做到這一點,但發現,會有多個文件。

用戶名和密碼永遠不會改變,但文件名不同,像15個不同的XML文件 - 也許更快即將來臨。

這些文件將始終位於相同的文件夾中。我可以寫一些將處理位於此目錄中的每個文件的東西,而不是像15-20個作業(每個文件一個)。等待下一個完成之前,或者我可以添加一個3分鐘的睡眠,然後開始下一個文件。

回答

30
pushd C:\test\utils 
for %%F in (F:\DB\*.xml) do (
    admin import-xml "-Dimport.file=%%~dpnxF" -Dadmin.db.password=test123 
) 
popd 

%%~dpnxF擴展爲d RIVE,p ATH,基部Ñ AME和e當前文件的X張力。

如果您打算設置在環路使用環境變量(%foo%),閱讀help set你遇到麻煩之前,首先。

+0

太棒了。能夠用它來實現我所需要的。謝謝。 – Gabriel 2011-04-14 18:37:26

+0

你能否解釋一下如何避免在'for'循環中使用'set'的麻煩? – Snekse 2012-06-25 02:42:41

+0

Snekse,魔法字有*延遲變量擴展*。這是我必須在每一個我給出的第二批文件答案中解釋的東西。它也很好地在'help set'中解釋過。 – Joey 2012-06-25 05:31:45

0
for file in f:\DB\* 
do 
    admin import-xml -Dimport.file="$file" -Dadmin.db.password=test123 
done 
+0

不適用於Windows批處理! – kokbira 2014-03-17 20:14:30

7

您可以使用for命令。像這樣的事情在一個批處理文件:

for %%f in (*.xml) do call myotherbatch.bat %%f 

假設你正在運行的admin命令不返回,直到作業完成,上述循環將依次處理它們。

如果在提示符下(而不是在批處理文件中)運行該命令,則只能使用一個%。

相關問題