我想通过一个启动脚本安装一些程序,但一旦它第一次运行,它只会重新安装浪费时间和覆盖。 这是一个服务器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)} \ 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"}