@echo off setlocal EnableDelayedExpansion chcp 65001 > nul :: 65001 - UTF-8 :: Admin rights check if "%1"=="admin" ( echo Started with admin rights ) else ( echo Requesting admin rights... powershell -Command "Start-Process 'cmd.exe' -ArgumentList '/k \"\"%~f0\" admin\"' -Verb RunAs" exit /b ) :: Main cd /d "%~dp0" set BIN_PATH=%~dp0bin\ :: Checking for updates call check_updates.bat soft echo: :: Searching for .bat files in current folder, except files that start with "service" echo Pick one of the options: set "count=0" for %%f in (*.bat) do ( set "filename=%%~nxf" if /i not "!filename:~0,7!"=="service" if /i not "!filename:~0,13!"=="check_updates" ( set /a count+=1 echo !count!. %%f set "file!count!=%%f" ) ) :: Choosing file set "choice=" set /p "choice=Input file index (number): " if "!choice!"=="" goto :eof set "selectedFile=!file%choice%!" if not defined selectedFile ( echo Wrong choice, exiting... pause goto :eof ) :: Parsing args (mergeargs: 2=start param|1=params args|0=default) set "args=" set "capture=0" set "mergeargs=0" set QUOTE=" for /f "tokens=*" %%a in ('type "!selectedFile!"') do ( set "line=%%a" echo !line! | findstr /i "%BIN%winws.exe" >nul if not errorlevel 1 ( set "capture=1" ) if !capture!==1 ( if not defined args ( set "line=!line:*%BIN%winws.exe"=!" ) set "temp_args=" for %%i in (!line!) do ( set "arg=%%i" if not "!arg!"=="^" ( if "!arg:~0,2!" EQU "--" if not !mergeargs!==0 ( set "mergeargs=0" ) if "!arg:~0,1!" EQU "!QUOTE!" ( set "arg=!arg:~1,-1!" echo !arg! | findstr ":" >nul if !errorlevel!==0 ( set "arg=\!QUOTE!!arg!\!QUOTE!" ) else if "!arg:~0,1!"=="@" ( set "arg=\!QUOTE!@%~dp0!arg:~1!\!QUOTE!" ) else if "!arg:~0,5!"=="%%BIN%%" ( set "arg=\!QUOTE!!BIN_PATH!!arg:~5!\!QUOTE!" ) else ( set "arg=\!QUOTE!%~dp0!arg!\!QUOTE!" ) ) if !mergeargs!==1 ( set "temp_args=!temp_args!,!arg!" ) else ( set "temp_args=!temp_args! !arg!" ) if "!arg:~0,2!" EQU "--" ( set "mergeargs=2" ) else if !mergeargs!==2 ( set "mergeargs=1" ) ) ) if not "!temp_args!"=="" ( set "args=!args! !temp_args!" ) ) ) :: Creating service with parsed args set ARGS=%args% echo Final args: !ARGS! set SRVCNAME=zapret net stop %SRVCNAME% >nul 2>&1 sc delete %SRVCNAME% >nul 2>&1 sc create %SRVCNAME% binPath= "\"%BIN_PATH%winws.exe\" %ARGS%" DisplayName= "zapret" start= auto sc description %SRVCNAME% "Zapret DPI bypass software" sc start %SRVCNAME% pause endlocal