I want to install some programs via a startup script, but once it has run for the first time it'll just reinstall wasting time and overwriting. It's a Server 2008 R2.

Somewhere I found this

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
)

But it doesn't work. How could I get it to?

link|improve this question

25% accept rate
What scripting language is this supposed to be? It doesn't appear to be valid Windows .BAT file syntax, or VBscript, or Jscript, or PowerShell. – rmalayter Jan 30 at 20:01
It's a batch file, but it doesn't work so to be honest I'm happy to use anything. – Ed Cox Jan 30 at 20:06
Yes, you need to use "IF NOT EXIST" in batch files to test for file or direcotory existence, and get rid of the =="" part. I just voted Josh's answer below up. I didn't even recognize it was a batch file because of that, I thought it was Kixtart or some other obscure scripting tool. (Of course .BAT is a "weird" language too, but it is not obscure ;-) – rmalayter Jan 30 at 22:12
feedback

4 Answers

You need IF EXIST instead of just IF for batch programming.

e.g.

IF NOT EXIST "C:\Program Files\Microsoft Security Client" (
  :: Install product
)
link|improve this answer
feedback

Since you're running AD, why don't you try distributing these products via MSI and GPO?

link|improve this answer
1  
I'm glad I'm not the only person who thinks this every time I read yet another post about how to install stuff with a GPO-based startup script. – DJ Pon3 Jan 30 at 20:00
Because these programs don't have an MSI Installer. I've done it with Chrome and Handbrake, but it's not possible to do it for these. – Ed Cox Jan 30 at 20:06
1  
Adobe Reader X most assuredly does have an MSI. ftp.adobe.com/pub/adobe/reader/win/10.x/10.0.0/en_US – mfinni Jan 30 at 20:34
Also, 'mseinstall.exe -x' will extract the MSI installers for MSE. – mfinni Jan 30 at 20:41
feedback

Have your script drop a flag, create a text file or something, when the install completes that your script will look for on the subsequent runs. If it finds the flag it ends the process and doesn't re-install. If the flag doesn't exist it completes the install.

link|improve this answer
That does not cover the case of the product already being manually installed. – mfinni Jan 30 at 19:53
Correct. But if I read his question he says he wants to install something, then once it has run not have it run again the next time the startup script runs. If he wants to check for something that may already be installed prior to this he's going to have to add more checks to his process. – Mitch Jan 30 at 19:56
Yup, that's exactly my point. – mfinni Jan 30 at 20:32
1  
Ed - he's saying that when one of your installer BAT files successfully installs a product (CHECK FOR RETURN CODES!), you can have it leave a file on the machine that indicates success. Next time the BAT runs, if it sees that file there, it would just exit (or continue) at that point. But if you can get the syntax for checking for a file, you should also be able to get the syntax for checking for a folder, which is what you were first asking for. Spend some time boning up on your BAT file skills. – mfinni Jan 30 at 20:43
2  
Ed, this is not the best place to ask people to line-by-line troubleshoot your scripts. Start simple - write a BAT with a single action and see if that works as expected. Change one thing at a time. Go from there. – mfinni Jan 30 at 21:37
show 7 more comments
feedback

To test if a directory exists test for the presence of the "nul" file. This will work in BAT and CMD scripts on ANY Windows version.

Just testing for the folder itself often fails, especially if the folder is on a network-drive or accessed by UNC path.

Like this:

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

You can also use the trick to see if a drive-letter is in use or not. E.g if exists z:\nul will return true if z: is mapped on a network drive or if it is a DVD-drive, even if there is no disk in the drive.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.