2016-09-29 89 views
1

我有一个包含3组工作站的小型网络。我使用批处理文件按组尝试为此回收组中的第三方更新(群组中的文本文件的工作站名称)。我想安装一个应用程序,但仅限于安装了Outlook 2016。阅读帮助文件中的“if”,我想我可以添加一个“if exists”文件名“goto end”,但它不起作用。它似乎完全跳过了“如果存在”的行,并安装有或没有Outlook 2016的应用程序。我错过了什么?带有if语句的批处理文件不起作用

@ECHO OFF 
SET /P GroupName= 
FOR /F %%A IN (\\server\share\admin\workingfolder\update\groups\%groupname%.txt) DO (
IF EXIST "\\%%A\c$\program files (x86)\Microsoft Office\Office16\Outlook.exe" GOTO END 
xcopy /e /q "\\server\share\admin\software\application" "\\%%A\c$\temp\application\" 
psexec cmd "\\%%A\temp\application\application.msi" 
rmdir /s /q "\\%%A\c$\temp\application\" 
) 
exit 
:END  
ECHO "Outlook 2016 was not detected, application not installed > "\\server\share\admin\software\application\install logs\%%a.txt" 
exit 
+4

尝试删除'@ECHO OFF'行,并查看它打印出来的内容。它是否显示你对IF IFIST行的期望? – tmr232

回答

2

你有两个问题:

1)您的描述不符合你的代码。只有当outlook.exe不存在时,您的代码才会安装。

2)GOTO将打破任何块,也有块

解决方法:不要在块中使用GOTO

FOR /F %%A IN (\\server\groupname.txt) DO (
    echo Processing %%A 
    IF EXIST "\\%%A\c$\program files (x86)\Microsoft Office\Office16\Outlook.exe" (
     xcopy /e /q "\\server\application" "\\%%A\c$\temp\application\" 
    ) ELSE (
     ECHO "Outlook 2016 was not detected, application not installed 
    ) 
) 
+0

工作。非常感谢! – user2132386