La sintaxis del comando es incorrecta.

La sintaxis del comando es incorrecta.

Estoy pensando en crear un archivo por lotes que se ejecute al inicio, a través de GPO.

El lote instalará el host de TeamViewer para que podamos implementarlo para nuestros usuarios finales sin ninguna intervención de ellos.

El script está diseñado para ver si hay un archivo con el nombre de la máquina almacenado localmente y detenerse si lo hay. De lo contrario, elimine todo rastro de Teamviewer e instale la versión de host que tenemos y luego cree un archivo localmente para marcar que está instalada la versión correcta.

Cuando ejecutamos el script, la consola muestra el error "La sintaxis del comando es incorrecta".

¿Alguno de ustedes, magos, puede indicarme dónde me estoy equivocando, ya que imagino que si puedo ejecutar el archivo por lotes sin problemas, el GPO también debería poder hacerlo?

Si hay una manera más fácil o ordenada de hacer esto, hágamelo saber.

Cuando ejecutamos el script sin IF, funciona sin problemas.

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

Cambié los detalles de TeamViewer y del servidor para este foro (esos bits funcionan)

Muchas gracias tom

Respuesta1

A primera vista (tal vez incompleta):

  1. Nuncausar :labelni :: label-like commentdentro de un bloque de comandoencerrado entre ()paréntesis. (línea 1): utilizar if exist "C:\TeamViewer15\%computername%.jmw" (exit)en lugar deif exist "C:\TeamViewer15\%computername%.jmw" (exit) else ( yeliminar el paréntesis de cierre correspondiente (línea 65, en algún lugar antes de la exitpalabra clave).
  2. startcomandos (principalmente enlínea 61):Incluya siempre unTÍTULOpor ejemplo comostart "" /wait msiexec.exe /i …
  3. Más problemas con for /f "tokens=2 delims==" %%f in …(línea 12):

información relacionada