@echo off setlocal enabledelayedexpansion cls SET SCRIPT_PATH=%~dp0 cd /d "%SCRIPT_PATH%" REM REM Script Configuration. REM SET LOGFILE="%TEMP%\%~n0.log" SET SYNCTHING_EXE_NAME=syncthing-test.exe SET CLEAR_CONFIG_XML=0 REM REM Check prerequisites. where sed 2>&1 1> NUL: || goto :eof where %SYNCTHING_EXE_NAME% 2>&1 1> NUL: || goto :eof REM call :logAdd "[INFO] Ending previously started %SYNCTHING_EXE_NAME% instances ..." taskkill /f /im "%SYNCTHING_EXE_NAME%" 2> NUL: REM REM GUI Data call :startSyncthingInstance Anna 8801 8811 call :startSyncthingInstance Dad 8802 8812 call :startSyncthingInstance Felix 8803 8813 call :startSyncthingInstance Kevin 8804 8814 call :startSyncthingInstance Mum 8805 8815 REM call :logAdd "[INFO] %SYNCTHING_EXE_NAME% instances have been started." pause REM taskkill /f /im "%SYNCTHING_EXE_NAME%" 2> NUL: REM goto :eof :startSyncthingInstance REM REM Syntax: REM call :startSyncthingInstance [INSTANCE_NAME] [GUI_TCP_PORT] [LISTEN_TCP_PORT] REM REM Called By: REM MAIN REM REM Variables. SET TMP_SSI_NAME=%1 IF NOT DEFINED TMP_SSI_NAME goto :eof SET TMP_SSI_HOME_FOLDER="%SCRIPT_PATH%%TMP_SSI_NAME%" SET TMP_SSI_CONFIG_XML="%SCRIPT_PATH%%TMP_SSI_NAME%\config.xml" SET TMP_SSI_START_BATCH="%SCRIPT_PATH%%TMP_SSI_NAME%\start_%TMP_SSI_NAME%.cmd" REM SET TMP_SSI_GUI_PORT=%2 IF NOT DEFINED TMP_SSI_GUI_PORT goto :eof REM SET TMP_SSI_DATA_PORT=%3 IF NOT DEFINED TMP_SSI_DATA_PORT goto :eof REM REM Create home folder. IF "%CLEAR_CONFIG_XML%" == "1" RD /S /Q %TMP_SSI_HOME_FOLDER% 2> NUL: MD %TMP_SSI_HOME_FOLDER% 2> NUL: REM REM Detect a fresh installation. IF NOT EXIST "%TMP_SSI_CONFIG_XML%" ( call :generateKeysAndConfig %TMP_SSI_NAME% call :applyFirstTimeConfig %TMP_SSI_CONFIG_XML% %TMP_SSI_NAME% %TMP_SSI_GUI_PORT% %TMP_SSI_DATA_PORT% ) REM REM Create instance start batch script. (echo @echo off) > %TMP_SSI_START_BATCH% REM -gui-address=tcp4://127.0.0.1:%TMP_SSI_GUI_PORT% (echo "%SCRIPT_PATH%%SYNCTHING_EXE_NAME%" -home=%TMP_SSI_HOME_FOLDER% -no-console"") >> %TMP_SSI_START_BATCH% REM call :logAdd "[INFO] Starting Syncthing Instance [%TMP_SSI_NAME%], gui=[%TMP_SSI_GUI_PORT%], data=[%TMP_SSI_DATA_PORT%] ..." start "%TMP_SSI_NAME%" %TMP_SSI_START_BATCH% REM goto :eof :generateKeysAndConfig REM REM Syntax: REM call :generateKeysAndConfig [INSTANCE_NAME] REM REM Called By: REM :startSyncthingInstance REM REM Global Variables. REM [IN] SYNCTHING_EXE_NAME REM REM Variables. SET TMP_GKAC_INSTANCE_NAME=%1 IF NOT DEFINED TMP_GKAC_INSTANCE_NAME goto :eof SET TMP_GKAC_INSTANCE_HOME=%SCRIPT_PATH%%TMP_GKAC_INSTANCE_NAME% REM REM Generate a fresh deviceID, keys and config. call :logAdd "[INFO] generateKeysAndConfig: Generating new keys and config for instance [%TMP_GKAC_INSTANCE_NAME%] ..." REM "%SCRIPT_PATH%%SYNCTHING_EXE_NAME%" -logflags=0 -generate "%TMP_GKAC_INSTANCE_HOME%" "%SCRIPT_PATH%%SYNCTHING_EXE_NAME%" -device-id -home "%TMP_GKAC_INSTANCE_HOME%" > "%TMP_GKAC_INSTANCE_HOME%\device_id.txt" REM goto :eof :applyFirstTimeConfig REM REM Syntax: REM call :applyFirstTimeConfig [CONFIG_XML_FULLFN] [INSTANCE_NAME] [GUI_TCP_PORT] [DATA_TCP_PORT] REM REM Called By: REM :startSyncthingInstance REM REM Variables. SET TMP_AFTC_CONFIG_XML=%1 SET TMP_AFTC_CONFIG_XML_TMP=%TMP_AFTC_CONFIG_XML:.xml=.xml.tmp% IF NOT EXIST %TMP_AFTC_CONFIG_XML% call :logAdd "[WARN] applyFirstTimeConfig: Skipping non-existant config [%TMP_AFTC_CONFIG_XML%:"=]." & goto :eof REM SET TMP_AFTC_INSTANCE_NAME=%2 IF NOT DEFINED TMP_AFTC_INSTANCE_NAME goto :eof REM SET TMP_AFTC_GUI_PORT=%3 IF NOT DEFINED TMP_AFTC_GUI_PORT goto :eof REM SET TMP_AFTC_DATA_PORT=%4 IF NOT DEFINED TMP_AFTC_DATA_PORT goto :eof REM REM Adjust syncthing "config.xml". call :logAdd "[INFO] applyFirstTimeConfig: Adjusting [%TMP_AFTC_CONFIG_XML:"=%] ..." REM REM WebGUI Port, Data Port, Do not auto-upgrade, Do not start browser sed.exe -e "s/
127\.0\.0\.1:8384<\/address>/127.0.0.1:%TMP_AFTC_GUI_PORT%<\/address>/g" -e "s/