Windows – Start a program based on a wildcard in a Batch Script

batchuninstallwildcardswindows

I'm creating a setup script for a program developed by someone else. Their installer won't install over an existing version, so I need to uninstall any previous installations.

The uninstaller is named unins$num.exe, where the $num is a number that seems to increment each time the program is installed, (e.g. unins000.exe, unins001.exe, unins002.exe).

I'm using a MS-DOS batch script at the moment, as other people in my department would have a chance of maintaining it, but if it is much easier in some other language, I'm open to change. The only requirement is that I can't install an interpreter first, so it must be built in to Windows.

My target platforms are Windows XP and Windows 7. Windows Vista support is nice, but not required.

How can I use a wildcard to start the program, so I don't need to list 1000 possible exe's?

Best Answer

This assumes that the target folder would only contain a single unins$num.exe executable, and that the batch script is in the same folder as the uninstaller:

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

In basic terms it just loops through the output of dir /b unins*.exe and executes each result one-by-one.

If you wanted it so that the batch script could be executed from another location (but still kept in the same folder as the uninstallation executable) then you could add %~dp0 (the path of the batch script) to the script:

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

Finally, if you wanted the batch script in a different folder to the uninstallation executable then you just replace %~dp0 with whatever the full path is, e.g. if the uninstaller is in C:\CoolProgram:

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