Die Syntax des Befehls ist falsch

Die Syntax des Befehls ist falsch

Ich möchte eine Batchdatei erstellen, die beim Start über GPO ausgeführt wird.

Der Batch installiert den TeamViewer-Host, sodass wir dies unseren Endbenutzern ohne Eingabe ihrerseits bereitstellen können.

Das Skript soll prüfen, ob eine Datei mit dem lokal gespeicherten Computernamen vorhanden ist, und es stoppen, wenn dies der Fall ist. Wenn nicht, entfernen Sie alle Spuren von Teamviewer und installieren Sie die Hostversion, die wir dann haben, um lokal eine Datei zu erstellen, die die richtige Version kennzeichnet.

Wenn wir das Skript ausführen, gibt die Konsole den Fehler „Die Syntax des Befehls ist falsch.“ aus.

Kann mir bitte einer von euch Zauberern einen Hinweis darauf geben, wo ich stolpere? Ich stelle mir nämlich vor, dass, wenn ich die Batchdatei problemlos ausführen kann, dies mit der Gruppenrichtlinie ebenfalls möglich sein sollte.

Wenn es einen einfacheren oder saubereren Weg gibt, lassen Sie es mich bitte wissen.

Wenn wir das Skript ohne IF ausführen, funktioniert es problemlos.

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

Ich habe die TeamViewer- und Serverdetails für dieses Forum geändert (diese Teile funktionieren)

Vielen Dank, Tom

Antwort1

Auf den ersten Blick (möglicherweise unvollständig):

  1. NiemalsVerwenden Sie :labelnoch :: label-like commentinnerhalb eines Befehlsblocks()in Klammern eingeschlossen . (Linie 1): verwenden Sie if exist "C:\TeamViewer15\%computername%.jmw" (exit)anstelle vonif exist "C:\TeamViewer15\%computername%.jmw" (exit) else ( UndEntfernen Sie die entsprechende schließende Klammer (Linie 65, irgendwo vor dem exitSchlüsselwort).
  2. startBefehle (hauptsächlich inLinie 61):Fügen Sie immer einTITELzB alsstart "" /wait msiexec.exe /i …
  3. Weitere Probleme mit for /f "tokens=2 delims==" %%f in …(Linie 12):

verwandte Informationen