Назад | Перейти на главную страницу

Windows: запускать сценарий запуска установки, только если каталог не существует

Я хочу установить некоторые программы с помощью сценария запуска, но как только он запустится в первый раз, он просто переустановит трату времени и перезапись. Это Server 2008 R2.

Где-то я нашел это

IF NOT "C:\Program Files\Microsoft Security Client"=="" 
(
    echo "Already Installed"
) 
else 
(
    "\\192.168.1.104\Programs\Microsoft Security Essentials\Microsoft Security Essentials.exe" /s /runwgacheck
)

IF NOT "C:\Program Files (x86)\Adobe\Reader 10.0"=="" 
(
    echo "Already Installed"
) 
else 
(
    "\\192.168.1.104\Programs\Adobe Reader\AdbeRdr1012_en_US.exe" /sAll /rs /msi EULA_ACCEPT=YES
)

Но не работает. Как мне это добраться?

Тебе нужно IF EXIST вместо просто IF для пакетного программирования.

например

IF NOT EXIST "C:\Program Files\Microsoft Security Client" (
  :: Install product
)

Поскольку вы используете AD, почему бы вам не попробовать распространять эти продукты через MSI и GPO?

Пусть ваш скрипт сбросит флаг, создаст текстовый файл или что-то в этом роде, когда установка завершится, что ваш скрипт будет искать при последующих запусках. Если он находит флаг, он завершает процесс и не переустанавливается. Если флаг не существует, установка завершается.

Чтобы проверить, существует ли каталог, проверьте наличие файла "nul". Это будет работать в сценариях BAT и CMD в ЛЮБОЙ версии Windows.

Простое тестирование самой папки часто не удается, особенно если папка находится на сетевом диске или доступна по пути UNC.

Как это:

if exists c:\somedir\nul (
  echo folder somedir exists in c:\
)

Вы также можете использовать этот трюк, чтобы узнать, используется ли буква диска или нет. Например, если существует, z: \ nul вернет истину, если z: отображается на сетевом диске или если это DVD-привод, даже если в приводе нет диска.

2015 год, попробуйте PowerShell.

if (! (Test-Path -Path "$ Env: ProgramFiles \ Microsoft Security Client")) {

Write-Host "Not Installed, Installing..."
iex "\\192.168.1.104\Programs\Microsoft Security Essentials\Microsoft Security Essentials.exe /s /runwgacheck"

}

if (! (Test-Path -Path "$ {Env: ProgramFiles (x86)} \ Adobe \ Reader 10.0")) {

Write-Host "Not Installed, Installing..."
iex "\\192.168.1.104\Programs\Adobe Reader\AdbeRdr1012_en_US.exe /sAll /rs /msi EULA_ACCEPT=YES"

}