コマンドの構文が正しくありません

コマンドの構文が正しくありません

GPO 経由で起動時に実行されるバッチ ファイルの作成を検討しています。

このバッチでは TeamViewer ホストをインストールして、エンド ユーザーからの入力なしにこれを展開できるようにします。

このスクリプトは、マシン名がローカルに保存されているファイルがあるかどうかを確認し、ある場合は停止するように設計されています。ない場合は、Teamviewer のすべての痕跡を削除し、ホスト バージョンをインストールしてから、正しいバージョンがインストールされていることを示すファイルをローカルに作成します。

スクリプトを実行すると、コンソールに「コマンドの構文が正しくありません」というエラーが表示されます。

バッチ ファイルを問題なく実行できるのであれば、GPO も問題なく実行できるはずだと考えますが、どこでつまずいているのか、ウィザードの皆さん、アドバイスをいただけませんか。

もっと簡単できちんとした方法があれば、ぜひ教えてください。

IF なしでスクリプトを実行すると、問題なく動作します。

if exist "C:\TeamViewer15\%computername%.jmw" (exit) else (

tasklist /FI "IMAGENAME eq TeamViewer.exe" 2>NUL | find /I /N "TeamViewer.exe">NUL
if "%ERRORLEVEL%"=="0" (GOTO :KILL) ELSE (GOTO :REMOVEMSI)
:KILL
taskkill /f /im TeamViewer.exe
TIMEOUT 2
GOTO :REMOVEMSI
:REMOVEMSI
wmic product where vendor="TeamViewer"
if not "%errorlevel%"=="0" GOTO :CHECKOS
for /f "tokens=2 delims==" %%f in ('wmic product Where "vendor like 'TeamViewer'" get IdentifyingNumber /value ^| find "="') do set "id=%%f"
msiexec.exe /x "%id%" /qn
GOTO :CHECKOS
:CHECKOS
cd\
Set "OS64=C:\Program Files (x86)"
IF EXIST "%OS64%" (GOTO :UNINSTALL64) ELSE (GOTO :UNINSTALL32)
:UNINSTALL64
cd\
Set "OLD64="C:\Program Files (x86)\TeamViewer\Version"*"
IF EXIST "%OLD64%" (GOTO :PREVIOUS64) ELSE (GOTO :REMOVE64)
:UNINSTALL32
cd\
Set "OLD32=C:\Program Files\TeamViewer\Version*"
IF EXIST "%OLD32%" (GOTO :PREVIOUS32) ELSE (GOTO :REMOVE32)
:PREVIOUS32
cd\
cd %ProgramFiles%\TeamViewer\Version*
IF NOT EXIST "*uninstall*" GOTO :REMOVE32
start uninstall.exe /S 
GOTO :REMOVE32
:REMOVE32
cd\
cd %ProgramFiles%\TeamViewer
IF NOT EXIST "*uninstall*" GOTO :REMOVEFILES32
start uninstall.exe /S
GOTO :REMOVEFILES32
:REMOVEFILES32
reg delete "HKLM\Software\TeamViewer" /f
cd %temp%
rd TeamViewer /s /Q
GOTO :INSTALL
:PREVIOUS64
cd\
cd %ProgramFiles(x86)%\TeamViewer\Version*
IF NOT EXIST "*uninstall*" GOTO :REMOVE64
start uninstall.exe /S
GOTO :REMOVE64
:REMOVE64
cd\
cd %ProgramFiles(x86)%\TeamViewer
IF NOT EXIST "*uninstall*" GOTO :REMOVEFILES64
start uninstall.exe /S
GOTO :REMOVEFILES64
:REMOVEFILES64
reg delete "HKLM\Software\Wow6432Node\TeamViewer" /f
cd %temp%
rd TeamViewer /s /Q



REM INSTALL TEAM VIEWER HOST V15

start /wait msiexec.exe /i "\\DFSNAMESERVER\files\admin\Software Distribution\TeamViewer\TeamViewer_Host.msi" /qn CUSTOMCONFIGID=MYCUSTOMERCONFIGID APITOKEN=CUSTOMERAPITOKENKEY ASSIGNMENTOPTIONS="--reassign --alias %ComputerName% --grant-easy-access"



REM CREATE INSTALLATION MARKER

md C:\TeamViewer15
fsutil file createnew "C:\TeamViewer15\%computername%.jmw" 10
)



exit

このフォーラムの TeamViewer とサーバーの詳細を変更しました (これらの部分は動作します)

ありがとうトム

答え1

初登場時(不完全かもしれない):

  1. 一度もないコマンドブロック内で:labelnorを使用する:: label-like comment括弧内()。(ライン1):if exist "C:\TeamViewer15\%computername%.jmw" (exit)の代わりに使用するif exist "C:\TeamViewer15\%computername%.jmw" (exit) else ( そして対応する閉じ括弧(65行目(キーワードの前のどこかにexit
  2. startコマンド(主に61行目):必ずタイトル例えばstart "" /wait msiexec.exe /i …
  3. for /f "tokens=2 delims==" %%f in …(に関するその他の問題12行目):

関連情報