Windows:如果目录不存在,则只运行安装启动脚本

我想通过一个启动脚本安装一些程序,但一旦它第一次运行,它只会重新安装浪费时间和覆盖。 这是一个服务器2008 R2。

我find了这个地方

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发布这些产品?

让脚本放下一个标志,创build一个文本文件或一些东西,当安装完成后,脚本将在后续运行中查找。 如果它发现该标志结束的过程,不重新安装。 如果标志不存在,则完成安装。

要testing一个目录是否存在,testing是否存在“nul”文件。 这将在任何Windows版本的BAT和CMD脚本中工作。

只是testing文件夹本身往往失败,特别是如果该文件夹位于networking驱动器或通过UNCpath访问。

喜欢这个:

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

您也可以使用该技巧来查看驱动器号是否正在使用。 例如,如果存在z:\ nul,如果z:映射到networking驱动器或者是DVD驱动器,即使驱动器中没有磁盘,也会返回true。

到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)} \ Adob​​e \ 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" 

}