2009-06-21 73 views
2

鍵我有目錄結構:如何運行的* .exe /從蝙蝠在循環

DIR 
|-UNINSTALL.BAT 
|-component_name 
    |-source 
    |-setup.exe 
    |-uninst.bat 
|-another_component_name 
    |-source 
    |-setup.exe 
    |-uninst.bat 
|-yet_another_component_name 
    |-source 
    |-setup.exe 
    |-uninst.bat 

等等...

在像「COMPONENT_NAME」每個目錄我有setup.exe文件它在Delphi中將當前組件安裝到調色板組件。 uninst.bat只包含這個字符串:

"setup.exe" /uninstall

所以我需要寫在DIRUNINSTALL_ALL.bat,將運行中的所有組件目錄的uninst.bat。

預先感謝您。

回答

2

,你可以用下面這行做到這一點:

for /f %%a in ('dir /b /s uninst.bat') do call %%a 

注意「%%」是必要的批處理文件。如果您正在命令行上測試此功能,請僅使用'%'

0

這是批處理文件中的一種尷尬。儘管你可以用foreach聲明來做。我會建議,不過你可以看看Powershell,如果你願意的話,它肯定會給你提供這樣簡單的功能和更多的功能。

+1

Powershell的一個潛在問題是它可能未安裝在大多數盒子上,而您始終可以運行批處理文件。 OTOH,批處理文件在試圖完成複雜的事情時吸得很糟糕,所以雖然這個特殊的事情可以在沒有太多大驚小怪的情況下完成,但我可以輕鬆地將映像運行到希望使用真實語言的情況。 – 2009-06-21 21:42:29

+0

是的。但是,PowerShell是作爲Windows 7,Windows 2008服務器的一部分發布的,並且可以通過Windows更新獲得大多數其他版本的Windows,並且受到Microsoft產品支持的支持。所以在受控版本環境下應該可以安裝。我認爲這些好處超過了安裝它的障礙。 – 2009-06-21 23:05:22

0

您想使用「for」結構。像這樣:

for %%i in (component_name another_component_name yet_another_component_name) do %%i\uninst.bat 

如果將「for」循環放入批處理文件中,則需要雙轉義(%%)。如果您只是在命令提示符下鍵入它,則只能使用1%。

此外,如果遵循某些約定,則可以使用通配符來匹配目錄名稱。打開命令提示符並運行「for /?」看到它可以做的一切...我相信有一個/ d選項來匹配目錄。這看起來是這樣的:

for /D %%d in (component_*) do %%d\uninst.bat 

(顯然,調整通配符來匹配您的組件目錄。)

0

這應該工作:

FOR /F %%a IN ('dir /b /s uninst.bat') DO START /B %%a 

如果你想讓他們等待對方,使用這個:

FOR /F %%a IN ('dir /b /s uninst.bat') DO START /B /WAIT %%a 
0

你描述你的問題的方式,你只有一個級別的子級可怕ctories,並且您始終從根調用同一批次。因此:

Uninstall_all.cmd

@echo off 
for /F "delims=" %%d in ('dir /b /ad') do cd "%%d"& start /b /w ..\uninstall.bat& cd .. 

應該做的伎倆。