@echo off setlocal enabledelayedexpansion :: Define variables set "SCRIPT_DIR=%~dp0" set "EXTRACT_DIR=%SCRIPT_DIR%gitportable" set "GIT_ARCHIVE=PortableGit.7z.exe" set "API_URL=https://api.github.com/repos/git-for-windows/git/releases/latest" :: Check if Git is available in the PATH where git >nul 2>nul if %errorlevel%==0 ( echo Git is already installed and available in PATH. goto :EOF ) :: Check if gitportable folder already exists if exist "%EXTRACT_DIR%\" ( echo 'gitportable' folder already exists. Skipping download. goto :EOF ) :: Use PowerShell to get the download URL dynamically echo Fetching latest Portable Git release info... for /f "usebackq delims=" %%i in (`powershell -NoProfile -Command ^ "(Invoke-RestMethod -Uri '%API_URL%').assets | Where-Object { $_.name -like '*64-bit.7z.exe' } | Select-Object -First 1 -ExpandProperty browser_download_url"`) do ( set "GIT_URL=%%i" ) if not defined GIT_URL ( echo Failed to find download URL from GitHub API. exit /b 1 ) echo Downloading Portable Git from: %GIT_URL% powershell -NoProfile -Command "Invoke-WebRequest -Uri '%GIT_URL%' -OutFile '%SCRIPT_DIR%%GIT_ARCHIVE%'" :: Create extraction directory mkdir "%EXTRACT_DIR%" :: Extract Portable Git echo Extracting Portable Git... "%SCRIPT_DIR%%GIT_ARCHIVE%" -o"%EXTRACT_DIR%" -y :: Cleanup del "%SCRIPT_DIR%%GIT_ARCHIVE%" echo Done. Portable Git is ready in: %EXTRACT_DIR% pause