@echo off setlocal enabledelayedexpansion echo Starting Blender file compression... REM Check if files were dragged onto the batch file if "%~1"=="" ( echo. echo Usage: Drag .blend files onto this batch file to compress them. echo Output will be saved to the \output folder. echo. pause exit /b 1 ) REM Create output directory if it doesn't exist if not exist "output" mkdir "output" REM Initialize counters and tracking set "processed=0" set "crashed=0" set "skipped=0" set "deleted_similar=0" set "threshold_percent=10" REM Create a temporary Python script for compression set "TEMP_SCRIPT=compress_blend_temp.py" echo Creating Python script: !TEMP_SCRIPT! ( echo import bpy echo import os echo import sys echo. echo # Enable compression globally echo bpy.context.preferences.filepaths.save_version = 0 echo bpy.context.preferences.filepaths.use_file_compression = True echo. echo # Create output directory if it doesn't exist echo if not os.path.exists^("output"^): echo os.makedirs^("output"^) echo. echo # Get command line arguments ^(the dragged files^) echo blend_files = sys.argv[sys.argv.index^("--"^) + 1:] if "--" in sys.argv else [] echo. echo print^("Found " + str^(len^(blend_files^)^) + " .blend files to compress"^) echo. echo for blend_file in blend_files: echo if blend_file.lower^(^).endswith^(".blend"^): echo try: echo # Create output path in output folder echo filename = os.path.basename^(blend_file^) echo output_file = os.path.join^("output", filename^) echo # Check if output file already exists echo if os.path.exists^(output_file^): echo print^("SKIP_EXISTING:" + blend_file^) echo continue echo print^("PROCESSING:" + blend_file^) echo # Load the blend file echo bpy.ops.wm.open_mainfile^(filepath=blend_file^) echo # Save with compression to output folder echo bpy.ops.wm.save_mainfile^(filepath=output_file, compress=True^) echo print^("SUCCESS:" + blend_file + ":" + output_file^) echo except Exception as e: echo print^("CRASH:" + blend_file + ":" + str^(e^)^) echo else: echo print^("SKIP_NOT_BLEND:" + blend_file^) echo. echo print^("COMPRESSION_COMPLETE"^) echo bpy.ops.wm.quit_blender^(^) ) > "!TEMP_SCRIPT!" REM Check if script was created successfully if exist "!TEMP_SCRIPT!" ( echo Script created successfully: !TEMP_SCRIPT! ) else ( echo ERROR: Failed to create script file! pause exit /b 1 ) REM Run Blender to process the dragged files echo Processing dragged .blend files... echo Using script: !TEMP_SCRIPT! blender --background --factory-startup --python "!TEMP_SCRIPT!" -- %* 2^>^&1 | powershell -NoProfile -Command "$input | Tee-Object -FilePath 'blender_output.txt'" REM Clean up temporary script echo Cleaning up temporary script... del "!TEMP_SCRIPT!" 2>nul REM Parse output and generate report echo. echo ======================================== echo COMPRESSION REPORT echo ======================================== echo. REM Count processed files and get file info for /f "tokens=1,2,3 delims=:" %%a in (blender_output.txt) do ( if "%%a"=="SUCCESS" ( set /a processed+=1 set "original_file=%%b" set "compressed_file=%%c" REM Get file sizes for %%f in ("!original_file!") do set "original_size=%%~zf" for %%f in ("!compressed_file!") do set "compressed_size=%%~zf" echo [!processed!] !original_file! echo Original: !original_size! bytes echo Compressed: !compressed_size! bytes set /a "savings=!original_size! - !compressed_size!" if !original_size! gtr 0 (set /a percent=(savings*100)/original_size) else (set percent=0) echo Savings: !savings! bytes echo Reduction: !percent!%% if !percent! lss !threshold_percent! ( del "!compressed_file!" 2>nul set /a deleted_similar+=1 echo Deleted: too similar to original ) echo. ) else if "%%a"=="CRASH" ( set /a crashed+=1 echo [!crashed!] CRASHED: %%b echo Error: %%c echo. ) else if "%%a"=="SKIP_EXISTING" ( set /a skipped+=1 echo [!skipped!] SKIPPED ^(already exists^): %%b echo. ) else if "%%a"=="SKIP_NOT_BLEND" ( set /a skipped+=1 echo [!skipped!] SKIPPED ^(not .blend^): %%b echo. ) ) REM Clean up output file del /f /q "blender_output.txt" 2>nul echo ======================================== echo SUMMARY echo ======================================== echo Processed: !processed! files echo Crashed: !crashed! files echo Skipped: !skipped! files echo Deleted ^(too similar^): !deleted_similar! files echo Total: %* files echo ======================================== echo. echo Done! pause