2016-09-29 33 views
1

私はワークステーションの3つのグループを持つ小さなネットワークを持っています。バッチファイルを使用して、サードパーティの更新プログラムを、グループごとに(テキストファイル内のワークステーション名をグループごとに)プッシュして、これをリサイクルしようとしています。 Outlook 2016がインストールされている場合に限り、アプリケーションをインストールしたいと考えています。 "if"のヘルプファイルを読んで、 "if exist"というファイル名を "goto end"に追加できると思っていましたが、動作しません。それは完全に "存在する"行をスキップし、Outlook 2016の有無にかかわらずアプリをインストールするようです。何が欠けていますか?if exists文が動作しないバッチファイル

1)あなたの記述はあなたのコードにフィットしません:

@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 EXIST行に期待していたことを示していますか? – tmr232

答えて

2

は、次の2つの問題があります。 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