Batch file 带有if-exist语句的批处理文件不工作

Batch file 带有if-exist语句的批处理文件不工作,batch-file,if-statement,Batch File,If Statement,我有一个带有3组工作站的小型网络。我使用批处理文件按组推送第三方更新(按组推送文本文件中的工作站名称),我正试图为此回收这些更新。我想安装应用程序,但仅在安装了Outlook 2016的情况下。在阅读“if”的帮助文件时,我想我可以添加一个“if exist'filename'goto end”,但它不起作用。它似乎完全跳过了“如果存在”这一行,在有或没有Outlook 2016的情况下安装应用程序。我错过了什么 @ECHO OFF SET /P GroupName= FOR /F %%A IN

我有一个带有3组工作站的小型网络。我使用批处理文件按组推送第三方更新(按组推送文本文件中的工作站名称),我正试图为此回收这些更新。我想安装应用程序,但仅在安装了Outlook 2016的情况下。在阅读“if”的帮助文件时,我想我可以添加一个“if exist'filename'goto end”,但它不起作用。它似乎完全跳过了“如果存在”这一行,在有或没有Outlook 2016的情况下安装应用程序。我错过了什么

@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
你有两个问题:

1) 您的描述与代码不符。您的代码将仅在outlook.exe不存在时安装

2)
GOTO
将断开任何块,也将断开FOR块

解决方案:不要在块中使用
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
    )
)

尝试删除
@ECHO OFF
行,然后查看打印出的内容。它是否显示了您对
行(如果存在)的期望值?