根据批处理脚本中的通配符启动程序

dax*_*rod 8 windows uninstall batch wildcards

我正在为其他人开发的程序创建安装脚本。他们的安装程序不会安装在现有版本上,所以我需要卸载任何以前的安装。

卸载程序名为 unins$num.exe,其中 $num 是一个数字,每次安装程序时它都会递增(例如 unins000.exe、unins001.exe、unins002.exe)。

我目前正在使用 MS-DOS 批处理脚本,因为我部门的其他人有机会维护它,但如果使用其他语言更容易,我愿意进行更改。唯一的要求是我不能先安装解释器,所以它必须内置到 Windows 中。

我的目标平台是 Windows XP 和 Windows 7。Windows Vista 支持很好,但不是必需的。

如何使用通配符启动程序,这样我就不需要列出 1000 个可能的 exe 文件?

Gaf*_*aff 10

这假设目标文件夹仅包含一个 unins$num.exe 可执行文件,并且批处理脚本与卸载程序位于同一文件夹中:

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

在基本术语中,它只是遍历输出dir /b unins*.exe并逐一执行每个结果。

如果您想要它以便可以从另一个位置执行批处理脚本(但仍与卸载可执行文件保存在同一文件夹中),那么您可以将 %~dp0 (批处理脚本的路径)添加到脚本中:

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

最后,如果您希望批处理脚本与卸载可执行文件位于不同的文件夹中,那么您只需将 %~dp0 替换为完整路径,例如,如果卸载程序位于C:\CoolProgram

@echo off
FOR /f "tokens=*" %%G IN ('dir /b C:\CoolProgram\unins*.exe') DO C:\CoolProgram\%%G
Run Code Online (Sandbox Code Playgroud)