6

Я создаю сценарий установки для программы, разработанной кем-то другим. Их установщик не будет установлен поверх существующей версии, поэтому мне нужно удалить все предыдущие установки.

Деинсталлятор называется unins $ num.exe, где $ num - это число, которое увеличивается с каждым разом при установке программы (например, unins000.exe, unins001.exe, unins002.exe).

Сейчас я использую пакетный скрипт MS-DOS, так как другие сотрудники в моем отделе могли бы его поддержать, но если это будет намного проще на каком-то другом языке, я готов измениться. Единственное требование - я не могу сначала установить переводчик, поэтому он должен быть встроен в Windows.

Моими целевыми платформами являются Windows XP и Windows 7. Поддержка Windows Vista хороша, но не обязательна.

Как я могу использовать подстановочный знак для запуска программы, поэтому мне не нужно перечислять 1000 возможных exe-файлов?

1 ответ1

8

Это предполагает, что целевая папка будет содержать только один исполняемый файл unins $ num.exe и что пакетный скрипт находится в той же папке, что и деинсталлятор:

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

В общих чертах он просто просматривает вывод dir /b unins*.exe и выполняет каждый результат один за другим.

Если вы хотите, чтобы пакетный сценарий мог выполняться из другого места (но при этом он оставался в той же папке, что и исполняемый файл деинсталляции), вы можете добавить% ~ 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .