@echo off
setlocal

echo ==============================
echo Gathering System Information...
echo ==============================
echo.

:: Get Desktop path safely
for /f "delims=" %%i in ('powershell -NoProfile -Command "[Environment]::GetFolderPath('Desktop')"') do set "OUTPUT=%%i\SystemInfo.txt"

echo Output will be:
echo %OUTPUT%
echo.

:: Single-line PowerShell (stable)
powershell -NoProfile -ExecutionPolicy Bypass -Command "$cs=Get-CimInstance Win32_ComputerSystem; $cpu=(Get-CimInstance Win32_Processor).Name; $os=Get-CimInstance Win32_OperatingSystem; $bios=Get-CimInstance Win32_BIOS; $uuid=(Get-CimInstance Win32_ComputerSystemProduct).UUID; $serial=(Get-CimInstance Win32_BIOS).SerialNumber; if(!$serial -or $serial -match 'System Serial Number|To be filled'){ $serial=(Get-CimInstance Win32_BaseBoard).SerialNumber }; if(!$serial){$serial='Unavailable'}; $ram=[math]::Round($cs.TotalPhysicalMemory/1GB,2); $drives=Get-CimInstance Win32_LogicalDisk -Filter 'DriveType=3'; $out=@(); $out+='=============================='; $out+='System Information'; $out+='=============================='; $out+=''; $out+='Serial Number:'; $out+=$serial; $out+=''; $out+='System Manufacturer and Model:'; $out+=($cs.Manufacturer + ' ' + $cs.Model); $out+=''; $out+='CPU:'; $out+=$cpu; $out+=''; $out+='Installed RAM (GB):'; $out+=$ram; $out+=''; $out+='System UUID:'; $out+=$uuid; $out+=''; $out+='OS Version:'; $out+=$os.Caption; $out+='OS Build:'; $out+=$os.BuildNumber; $out+=''; $out+='OS Install Date:'; $out+=$os.InstallDate.ToString('MM/dd/yyyy HH:mm:ss'); $out+=''; $out+='BIOS Release Date:'; $out+=$bios.ReleaseDate.ToString('MM/dd/yyyy HH:mm:ss'); $out+=''; $out+='Disk Information:'; foreach($d in $drives){ $size=[math]::Round($d.Size/1GB,2); $free=[math]::Round($d.FreeSpace/1GB,2); $used=$size-$free; $out+=('Drive ' + $d.DeviceID + ':'); $out+=('  Total Size (GB): ' + $size); $out+=('  Used Space (GB): ' + $used); $out+=('  Free Space (GB): ' + $free); $out+='' }; $out | Out-File -FilePath '%OUTPUT%' -Encoding utf8 -Force"

:: Verify output
if exist "%OUTPUT%" (
    echo.
    echo SUCCESS: File created.
    start "" "%OUTPUT%"
) else (
    echo.
    echo ERROR: File was NOT created.
)

echo.
pause