web-dev-qa-db-ja.com

バッチスクリプトのワイルドカードに基づいてプログラムを開始します

他の誰かが開発したプログラムのセットアップスクリプトを作成しています。彼らのインストーラーは既存のバージョンの上にインストールされないので、以前のインストールをアンインストールする必要があります。

アンインストーラーの名前はunins $ num.exeです。ここで、$ numは、プログラムがインストールされるたびに増加するように見える数値です(unins000.exe、unins001.exe、unins002.exeなど)。

私は現在MS-DOSバッチスクリプトを使用しています。私の部門の他の人がそれを維持する可能性があるためですが、他の言語ではるかに簡単な場合は、変更することができます。唯一の要件は、最初にインタープリターをインストールできないことです。そのため、インタープリターをWindowsに組み込む必要があります。

私のターゲットプラットフォームはWindows XPとWindows7です。WindowsVistaのサポートは素晴らしいですが、必須ではありません。

ワイルドカードを使用してプログラムを開始するにはどうすればよいので、1000個の可能なexeをリストする必要はありませんか?

8
daxlerod

これは、ターゲットフォルダーに単一のunins $ num.exe実行可能ファイルのみが含まれ、バッチスクリプトがアンインストーラーと同じフォルダーにあることを前提としています。

@echo off
FOR /f "tokens=*" %%G IN ('dir /b unins*.exe') DO %%G

基本的には、dir /b unins*.exeの出力をループして、各結果を1つずつ実行します。

バッチスクリプトを別の場所から実行できるようにしたい場合(ただし、アンインストール実行可能ファイルと同じフォルダーに保持したい場合)、スクリプトに%〜dp0(バッチスクリプトのパス)を追加できます。

@echo off
FOR /f "tokens=*" %%G IN ('dir /b %~dp0\unins*.exe') DO %~dp0\%%G

最後に、アンインストール実行可能ファイルとは別のフォルダーにあるバッチスクリプトが必要な場合は、%〜dp0をフルパスに置き換えます。アンインストーラーがC:\CoolProgramにある場合:

@echo off
FOR /f "tokens=*" %%G IN ('dir /b C:\CoolProgram\unins*.exe') DO C:\CoolProgram\%%G
10
Gaff