2009-06-21 17 views
2

で.BATから* .exeの/キーを実行する方法:「component_nameに」のようなすべてのディレクトリにように私は、ディレクトリ構造を有するループ

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 

と...

を私はsetup.exeファイルを持っています現在のコンポーネントをDelphiのパレットコンポーネントにインストールします。

"setup.exe" /uninstall

は、だから私は、すべてのコンポーネントのディレクトリでuninst.batを実行しますDIRUNINSTALL_ALL.batを記述する必要があります。 uninst.batのみ、この文字列が含まれています。

ありがとうございます。

答えて

2

あなたはこのラインでそれを行うことができます:「%%」は、バッチファイルのために必要であることを

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

注意を。コマンドラインでこれをテストする場合は、 '%'を1つだけ使用してください。

+0

それは動作しません。 1つの.batは、別の.batを実行します。これは、キーを持つ.exeファイルを実行します。 多分それはまったくできないでしょうか? – phpcoder

+1

が必要です。コンソール上でどのようなエラーが表示されますか?スタンドアロンのuninst.batをテストしましたか? – akf

0

これは、バッチファイル内のakwardの一種です。あなたはおそらくforeachステートメントでそれを行うことができます。私はあなたがそれをしたい場合は、Powershellを見ていることをお勧めします。

+1

Powershellの潜在的な問題の1つは、おそらくほとんどのボックスにインストールされているのではなく、常にバッチファイルを実行できることです。 OTOHのバッチファイルは、複雑な作業をしようとするとひどくうまくいってしまうので、あまりにも面倒なくこの特定のことを行うことはできますが、実際の言語を使いたい状況に簡単にイメージングできます。 –

+0

真。しかし、powershellはWindows 7、Windows 2008 serverの一部として出荷されており、Windowsの他のバージョンのWindows用の更新プログラムで利用でき、Microsoft Product Supportでサポートされています。したがって、制御されたリリース環境ではインストールが可能でなければなりません。私はそのメリットがインストールされるというハードルを上回ると思う。 –

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

あなたの問題を説明する方法は、サブダイアルのレベルが1つだけですあなたは常にルートから同じバッチを呼び出します。したがって:

Uninstall_all.cmd

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

は、トリックを行う必要があります。

関連する問題