[BUG] Install on Windows10 fails when HOME is not set. EPERM mkdir '\' fails
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
On a Win 10 host (ver=> Microsoft Windows [Version 10.0.19045.6466]), I was unable to use the powershell or CMD commands to install Claude Code.
The following command failed:
curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd
The actual output for install.cmd when it failed is shown next:
curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd
Setting up Claude Code...
× Installation failed
EPERM: operation not permitted, mkdir '\'
Try running with --force to override checks
Installation failed
I also tried using the powershell command irm https://claude.ai/install.ps1 | iex and it also failed with the same error. Both attempts were run in an ADMIN session/window.
NOTE: I enabled debugging for the install.cmd script so I could see every command executed and found the problem. The command mkdir was using the %HOME% environment variable which was not set in my cmd.exe window nor in my powershell window.
The solution was simple, just define HOME prior to running the installer.
set HOME=%USERPROFILE%
curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd
Setting up Claude Code...
√ Claude Code successfully installed!
Version: 2.1.71
Location: C:\Users\user1\.local\bin\claude.exe
Next: Run claude --help to get started
‼ Setup notes:
• Native installation exists but C:\Users\user1\.local\bin is not in your PATH. Add it by opening: System
Properties → Environment Variables → Edit User PATH → New → Add the path above. Then restart your terminal.
Installation complete!
What Should Happen?
Claude code should install without the user needing to set that variable or the documentation should be updated to state that this is needed.
Error Messages/Logs
Below is the debug output of install.cmd running
C:\play\claude-code-install>install.cmd
C:\play\claude-code-install>REM @echo off
C:\play\claude-code-install>setlocal enabledelayedexpansion
C:\play\claude-code-install>REM Claude Code Windows CMD Bootstrap Script
C:\play\claude-code-install>REM Installs Claude Code for environments where PowerShell is not available
C:\play\claude-code-install>REM Parse command line argument
C:\play\claude-code-install>set "TARGET="
C:\play\claude-code-install>if "!TARGET!" == "" set "TARGET=latest"
C:\play\claude-code-install>REM Validate target parameter
C:\play\claude-code-install>if /I "!TARGET!" == "stable" goto :target_valid
C:\play\claude-code-install>if /I "!TARGET!" == "latest" goto :target_valid
C:\play\claude-code-install>REM Check for 64-bit Windows
C:\play\claude-code-install>if /I "AMD64" == "AMD64" goto :arch_valid
C:\play\claude-code-install>REM Set constants
C:\play\claude-code-install>set "GCS_BUCKET=https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases"
C:\play\claude-code-install>set "DOWNLOAD_DIR=C:\Users\user1\.claude\downloads"
C:\play\claude-code-install>REM Use native ARM64 binary on ARM64 Windows, x64 otherwise
C:\play\claude-code-install>if /I "AMD64" == "ARM64" (set "PLATFORM=win32-arm64" ) else (set "PLATFORM=win32-x64" )
C:\play\claude-code-install>REM Create download directory
C:\play\claude-code-install>if not exist "!DOWNLOAD_DIR!" mkdir "!DOWNLOAD_DIR!"
C:\play\claude-code-install>REM Check for curl availability
C:\play\claude-code-install>curl --version 1>nul 2>&1
C:\play\claude-code-install>if !ERRORLEVEL! NEQ 0 (
echo curl is required but not available. Please install curl or use PowerShell installer. 1>&2
exit /b 1
)
C:\play\claude-code-install>REM Always download latest version (which has the most up-to-date installer)
C:\play\claude-code-install>call :download_file "!GCS_BUCKET!/latest" "!DOWNLOAD_DIR!\latest"
C:\play\claude-code-install>REM Downloads a file using curl
C:\play\claude-code-install>REM Args: "https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/latest"=URL, "C:\Users\user1\.claude\downloads\latest"=OutputPath
C:\play\claude-code-install>set "URL=https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/latest"
C:\play\claude-code-install>set "OUTPUT=C:\Users\user1\.claude\downloads\latest"
C:\play\claude-code-install>curl -fsSL "!URL!" -o "!OUTPUT!"
C:\play\claude-code-install>exit /b !ERRORLEVEL!
C:\play\claude-code-install>if !ERRORLEVEL! NEQ 0 (
echo Failed to get latest version 1>&2
exit /b 1
)
C:\play\claude-code-install>REM Read version from file
C:\play\claude-code-install>set /p VERSION= 0<"!DOWNLOAD_DIR!\latest"
C:\play\claude-code-install>del "!DOWNLOAD_DIR!\latest"
C:\play\claude-code-install>REM Download manifest
C:\play\claude-code-install>call :download_file "!GCS_BUCKET!/!VERSION!/manifest.json" "!DOWNLOAD_DIR!\manifest.json"
C:\play\claude-code-install>REM Downloads a file using curl
C:\play\claude-code-install>REM Args: "https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/2.1.71/manifest.json"=URL, "C:\Users\user1\.claude\downloads\manifest.json"=OutputPath
C:\play\claude-code-install>set "URL=https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/2.1.71/manifest.json"
C:\play\claude-code-install>set "OUTPUT=C:\Users\user1\.claude\downloads\manifest.json"
C:\play\claude-code-install>curl -fsSL "!URL!" -o "!OUTPUT!"
C:\play\claude-code-install>exit /b !ERRORLEVEL!
C:\play\claude-code-install>if !ERRORLEVEL! NEQ 0 (
echo Failed to get manifest 1>&2
exit /b 1
)
C:\play\claude-code-install>REM Extract checksum from manifest
C:\play\claude-code-install>call :parse_manifest "!DOWNLOAD_DIR!\manifest.json" "!PLATFORM!"
C:\play\claude-code-install>REM Parse JSON manifest to extract checksum for platform
C:\play\claude-code-install>REM Args: "C:\Users\user1\.claude\downloads\manifest.json"=ManifestPath, "win32-x64"=Platform
C:\play\claude-code-install>set "MANIFEST_PATH=C:\Users\user1\.claude\downloads\manifest.json"
C:\play\claude-code-install>set "PLATFORM_NAME=win32-x64"
C:\play\claude-code-install>set "EXPECTED_CHECKSUM="
C:\play\claude-code-install>REM Use findstr to find platform section, then look for checksum
C:\play\claude-code-install>set "FOUND_PLATFORM="
C:\play\claude-code-install>set "IN_PLATFORM_SECTION="
C:\play\claude-code-install>REM Read the manifest line by line
C:\play\claude-code-install>for /F "usebackq tokens=*" %i in ("!MANIFEST_PATH!") do (
set "LINE=%i"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE={"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="version": "2.1.71","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="buildDate": "2026-03-06T22:51:07Z","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="platforms": {"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="darwin-arm64": {"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="binary": "claude","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="checksum": "f3d8129ec7ddaf158c10e193df546421499d69b7f44ec2f0b67c3fe54f601cb9","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="size": 192377712"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE=},"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="darwin-x64": {"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="binary": "claude","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="checksum": "a8ff210022860b1567d35fba5822d9be4a74c422962e2e32c39f4116796d57c8","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="size": 198519888"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE=},"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="linux-arm64": {"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="binary": "claude","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="checksum": "ae26e4a5654238f0a684d5fd9a6bf592321b06eb88ea834343b275f310e39bea","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="size": 234383757"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE=},"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="linux-x64": {"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="binary": "claude","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="checksum": "61002e5f5c4190e9a775bd9cf90e57fff3f0379fb2c8edc653ac0942a347babd","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="size": 237119954"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE=},"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="linux-arm64-musl": {"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="binary": "claude","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="checksum": "e2223aa7ad06c216fa681996fa51388c1a8ba90cf0d5ce43f8ebaaa618d2b3b1","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="size": 224919229"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE=},"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="linux-x64-musl": {"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="binary": "claude","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="checksum": "46e941a6f6f354b47644cb132f33a2f55a9fc51fd84ec42fcf0355054aa79974","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="size": 227717442"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE=},"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="win32-x64": {"
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="binary": "claude.exe","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "LINE="checksum": "743c3a8bfefe20f7d466517c8e5de2ad46bced461e970e48ea0ce980f209a9c3","
REM Check if this line contains our platform
echo !LINE! | findstr /c:"\"win32-x64\":" 1>nul
if !ERRORLEVEL! EQU 0 (set "IN_PLATFORM_SECTION=1" )
REM If we're in the platform section, look for checksum
if defined IN_PLATFORM_SECTION (
echo !LINE! | findstr /c:"\"checksum\":" 1>nul
if !ERRORLEVEL! EQU 0 (
REM Extract checksum value
for /F "tokens=2 delims=:" %j in ("!LINE!") do (
set "CHECKSUM_PART=%j"
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
)
REM Check if we've left the platform section (closing brace)
echo !LINE! | findstr /c:"}" 1>nul
if !ERRORLEVEL! EQU 0 set "IN_PLATFORM_SECTION="
)
)
C:\play\claude-code-install>(
set "CHECKSUM_PART= "743c3a8bfefe20f7d466517c8e5de2ad46bced461e970e48ea0ce980f209a9c3","
REM Remove quotes, whitespace, and comma
set "CHECKSUM_PART=!CHECKSUM_PART: =!"
set "CHECKSUM_PART=!CHECKSUM_PART:"=!"
set "CHECKSUM_PART=!CHECKSUM_PART:,=!"
REM Check if it looks like a SHA256 (64 hex chars)
if not "!CHECKSUM_PART!" == "" (
call :check_length "!CHECKSUM_PART!" 64
if !ERRORLEVEL! EQU 0 (
set "EXPECTED_CHECKSUM=!CHECKSUM_PART!"
exit /b 0
)
)
)
C:\play\claude-code-install>REM Check if string length equals expected length
C:\play\claude-code-install>REM Args: "743c3a8bfefe20f7d466517c8e5de2ad46bced461e970e48ea0ce980f209a9c3"=String, 64=ExpectedLength
C:\play\claude-code-install>set "STR=743c3a8bfefe20f7d466517c8e5de2ad46bced461e970e48ea0ce980f209a9c3"
C:\play\claude-code-install>set "EXPECTED_LEN=64"
C:\play\claude-code-install>set "LEN=0"
C:\play\claude-code-install>if "!STR:~0,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~1,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~2,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~3,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~4,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~5,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~6,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~7,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~8,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~9,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~10,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~11,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~12,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~13,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~14,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~15,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~16,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~17,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~18,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~19,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~20,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~21,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~22,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~23,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~24,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~25,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~26,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~27,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~28,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~29,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~30,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~31,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~32,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~33,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~34,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~35,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~36,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~37,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~38,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~39,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~40,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~41,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~42,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~43,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~44,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~45,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~46,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~47,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~48,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~49,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~50,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~51,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~52,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~53,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~54,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~55,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~56,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~57,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~58,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~59,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~60,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~61,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~62,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~63,1!" == "" goto :count_done
C:\play\claude-code-install>set /a LEN+=1
C:\play\claude-code-install>goto :count_loop
C:\play\claude-code-install>if "!STR:~64,1!" == "" goto :count_done
C:\play\claude-code-install>if 64 == 64 exit /b 0
C:\play\claude-code-install>if !ERRORLEVEL! NEQ 0 (
echo Platform !PLATFORM! not found in manifest 1>&2
del "!DOWNLOAD_DIR!\manifest.json" 2>nul
exit /b 1
)
C:\play\claude-code-install>del "!DOWNLOAD_DIR!\manifest.json"
C:\play\claude-code-install>REM Download binary
C:\play\claude-code-install>set "BINARY_PATH=!DOWNLOAD_DIR!\claude-!VERSION!-!PLATFORM!.exe"
C:\play\claude-code-install>call :download_file "!GCS_BUCKET!/!VERSION!/!PLATFORM!/claude.exe" "!BINARY_PATH!"
C:\play\claude-code-install>REM Downloads a file using curl
C:\play\claude-code-install>REM Args: "https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/2.1.71/win32-x64/claude.exe"=URL, "C:\Users\user1\.claude\downloads\claude-2.1.71-win32-x64.exe"=OutputPath
C:\play\claude-code-install>set "URL=https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/2.1.71/win32-x64/claude.exe"
C:\play\claude-code-install>set "OUTPUT=C:\Users\user1\.claude\downloads\claude-2.1.71-win32-x64.exe"
C:\play\claude-code-install>curl -fsSL "!URL!" -o "!OUTPUT!"
C:\play\claude-code-install>exit /b !ERRORLEVEL!
C:\play\claude-code-install>if !ERRORLEVEL! NEQ 0 (
echo Failed to download binary 1>&2
if exist "!BINARY_PATH!" del "!BINARY_PATH!"
exit /b 1
)
C:\play\claude-code-install>REM Verify checksum
C:\play\claude-code-install>call :verify_checksum "!BINARY_PATH!" "!EXPECTED_CHECKSUM!"
C:\play\claude-code-install>REM Verify file checksum using certutil
C:\play\claude-code-install>REM Args: "C:\Users\user1\.claude\downloads\claude-2.1.71-win32-x64.exe"=FilePath, "743c3a8bfefe20f7d466517c8e5de2ad46bced461e970e48ea0ce980f209a9c3"=ExpectedChecksum
C:\play\claude-code-install>set "FILE_PATH=C:\Users\user1\.claude\downloads\claude-2.1.71-win32-x64.exe"
C:\play\claude-code-install>set "EXPECTED=743c3a8bfefe20f7d466517c8e5de2ad46bced461e970e48ea0ce980f209a9c3"
C:\play\claude-code-install>for /F "skip=1 tokens=*" %i in ('certutil -hashfile "!FILE_PATH!" SHA256') do (
set "ACTUAL=%i"
set "ACTUAL=!ACTUAL: =!"
if "!ACTUAL!" == "CertUtil:Thecommandcompletedsuccessfully." goto :verify_done
if "!ACTUAL!" NEQ "" (if /I "!ACTUAL!" == "!EXPECTED!" (exit /b 0 ) else (exit /b 1 ) )
)
C:\play\claude-code-install>(
set "ACTUAL=743c3a8bfefe20f7d466517c8e5de2ad46bced461e970e48ea0ce980f209a9c3"
set "ACTUAL=!ACTUAL: =!"
if "!ACTUAL!" == "CertUtil:Thecommandcompletedsuccessfully." goto :verify_done
if "!ACTUAL!" NEQ "" (if /I "!ACTUAL!" == "!EXPECTED!" (exit /b 0 ) else (exit /b 1 ) )
)
C:\play\claude-code-install>if !ERRORLEVEL! NEQ 0 (
echo Checksum verification failed 1>&2
del "!BINARY_PATH!"
exit /b 1
)
C:\play\claude-code-install>REM Run claude install to set up launcher and shell integration
C:\play\claude-code-install>echo Setting up Claude Code...
Setting up Claude Code...
C:\play\claude-code-install>"!BINARY_PATH!" install "!TARGET!"
× Installation failed
EPERM: operation not permitted, mkdir '\'
Try running with --force to override checks
C:\play\claude-code-install>set "INSTALL_RESULT=!ERRORLEVEL!"
C:\play\claude-code-install>REM Clean up downloaded file
C:\play\claude-code-install>REM Wait a moment for any file handles to be released
C:\play\claude-code-install>timeout /t 1 /nobreak 1>nul 2>&1
C:\play\claude-code-install>del /f "!BINARY_PATH!" 1>nul 2>&1
C:\play\claude-code-install>if exist "!BINARY_PATH!" (echo Warning: Could not remove temporary file: !BINARY_PATH! )
C:\play\claude-code-install>if !INSTALL_RESULT! NEQ 0 (
echo Installation failed 1>&2
exit /b 1
)
Installation failed
Steps to Reproduce
Run the installer
curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd
NOTE: Below are versions of my apps which might be used for the install
where curl
C:\Windows\System32\curl.exe
curl --version
curl 8.13.0 (Windows) libcurl/8.13.0 Schannel zlib/1.3.1 WinIDN
Release-Date: 2025-04-02
Protocols: dict file ftp ftps http https imap imaps ipfs ipns mqtt pop3 pop3s smb smbs smtp smtps telnet tftp ws wss
Features: alt-svc AsynchDNS HSTS HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM SPNEGO SSL SSPI threadsafe Unicode UnixSockets
where node
c:\p\nvm-nodejs\node.exe
node --version
v22.5.1
where claude
C:\Users\user1\.local\bin\claude.exe
claude --version
2.1.71 (Claude Code)
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
2.1.71
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
Windows Terminal
Additional Information
_No response_
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗