Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- mode con cols=85 lines=25
- setlocal EnableExtensions
- setlocal EnableDelayedExpansion
- (cd /d "%~dp0")&&(NET FILE||(powershell start-process -FilePath '%0' -verb runas)&&(exit /B)) >nul 2>&1
- ::===============================================================================================================
- :: UPDATE SCRIPTS SETS
- :: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- cd /d %~dp0
- set "UpdateUri=https://aka.ms/vs/15/release"
- :: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- set "VS=Visual Studio 2017"
- set "COMMUNITY=vs_community.exe"
- set "NEWCOMMUNITY=vs_community_new.exe"
- set "PROFESSIONAL=vs_professional.exe"
- set "NEWPROFESSIONAL=vs_professional_new.exe"
- set "ENTERPRISE=vs_enterprise.exe"
- set "NEWENTERPRISE=vs_enterprise_new.exe"
- set "DISM=dism.exe"
- echo 请键入更新缓存目录盘符,例如:e
- set /p WDLN=
- set "WorkFolder=%WDLN%:\Layout"
- ::===============================================================================================================
- set "SETUPFILEPATH=%~dp0Setup\"
- set "regexSETUPFILEPATH=%SETUPFILEPATH:\=\\%"
- ::===============================================================================================================
- for /f %%I in ('powershell ^(Get-Host^).UI.RawUI.WindowSize.width') do set "cw=%%I"
- ::===============================================================================================================
- if exist %SETUPFILEPATH% rmdir /s /q %SETUPFILEPATH%
- if exist "%WorkFolder%" rmdir /s /q "%WorkFolder%"
- :================================================================================================================
- ::===============================================================================================================
- call :TITLE
- call :BITSDOWNLOAD
- call :GETVERSION "%COMMUNITY%"
- set "TMPIMAGE=TempImage.wim"
- set "VS2017ESD=vs2017ver%Version%build%Date:~0,4%%Date:~5,2%%Date:~8,2%.esd"
- mkdir %WorkFolder%
- call :GETOLDESDFILE
- if exist %OLDESDFILE% (
- call :UPDATE
- ) else (
- call :DOWNLOAD
- )
- call :MAKEESDFILE 1
- call :MAKEESDFILE 2
- call :MAKEESDFILE 3
- call :EXIT
- :================================================================================================================
- ::===============================================================================================================
- ::BITSDOWNLOAD
- :BITSDOWNLOAD
- cls
- call :HEADER "下载 %VS% 最新安装程序"
- mkdir %SETUPFILEPATH% >nul 2>&1
- for /f "tokens=3 delims=:. " %%f in ('bitsadmin.exe /CREATE /DOWNLOAD "%VS% OffLine DownLoader" ^| findstr "Created job"') do (set GUID=%%f)
- bitsadmin /transfer %GUID% /download /priority foreground %UpdateUri%/%COMMUNITY% "%SETUPFILEPATH%%NEWCOMMUNITY%" >nul 2>&1
- bitsadmin /transfer %GUID% /download /priority foreground %UpdateUri%/%PROFESSIONAL% "%SETUPFILEPATH%%NEWPROFESSIONAL%" >nul 2>&1
- bitsadmin /transfer %GUID% /download /priority foreground %UpdateUri%/%ENTERPRISE% "%SETUPFILEPATH%%NEWENTERPRISE%" >nul 2>&1
- call :CHECKDETECTIONLEGALITY %NEWCOMMUNITY% %COMMUNITY%
- call :CHECKDETECTIONLEGALITY %NEWPROFESSIONAL% %PROFESSIONAL%
- call :CHECKDETECTIONLEGALITY %NEWENTERPRISE% %ENTERPRISE%
- goto :eof
- :================================================================================================================
- ::===============================================================================================================
- ::UPDATE
- :UPDATE
- call :HEADER "更新 %VS% 离线安装包镜像"
- echo 释放 %VS% 社区版离线安装包镜像...
- echo.
- call :APPLYIMAGE
- call :HEADER "更新 %VS% 离线安装包镜像"
- echo 更新 %VS% 社区版 ...
- echo.
- "%SETUPFILEPATH%%COMMUNITY%" --layout "%WorkFolder%" --lang zh-CN
- call :CAPTUREIMAGE "Community"
- call :HEADER "更新 %VS% 离线安装包镜像"
- echo 更新 %VS% 专业版 ...
- echo.
- call :CLEANUP
- "%SETUPFILEPATH%%PROFESSIONAL%" --layout "%WorkFolder%" --lang zh-CN
- call :APPENDIMAGE "Professional"
- call :HEADER "更新 %VS% 离线安装包镜像"
- echo 更新 %VS% 企业版 ...
- echo.
- call :CLEANUP
- "%SETUPFILEPATH%%ENTERPRISE%" --layout "%WorkFolder%" --lang zh-CN
- call :APPENDIMAGE "Enterprise"
- goto :eof
- :================================================================================================================
- ::===============================================================================================================
- ::DOWNLOAD
- :DOWNLOAD
- call :HEADER "下载 %VS% 离线安装包"
- echo 下载 %VS% 社区版 ...
- echo.
- "%SETUPFILEPATH%%COMMUNITY%" --layout "%WorkFolder%" --lang zh-CN
- call :CAPTUREIMAGE "Community"
- call :HEADER "下载 %VS% 离线安装包"
- echo 下载 %VS% 专业版 ...
- echo.
- call :CLEANUP
- "%SETUPFILEPATH%%PROFESSIONAL%" --layout "%WorkFolder%" --lang zh-CN
- call :APPENDIMAGE "Professional"
- call :HEADER "下载 %VS% 离线安装包"
- echo 下载 %VS% 企业版 ...
- echo.
- call :CLEANUP
- "%SETUPFILEPATH%%ENTERPRISE%" --layout "%WorkFolder%" --lang zh-CN
- call :APPENDIMAGE "Enterprise"
- goto :eof
- :APPLYIMAGE
- %DISM% /Apply-Image /ImageFile:"%OLDESDFILE%" /Index:1 /ApplyDir:"%WorkFolder%"
- echo.
- goto :eof
- :================================================================================================================
- ::===============================================================================================================
- ::CAPTUREIMAGE
- :CAPTUREIMAGE
- %DISM% /Capture-Image /ImageFile:"%TMPIMAGE%" /Name:"Visual Studio 2017 %~1" /Description:"Visual Studio 2017 %~1" /CaptureDir:"%WorkFolder%" /Compress:max
- echo.
- goto :eof
- :================================================================================================================
- ::===============================================================================================================
- ::APPENDIMAGE
- :APPENDIMAGE
- %DISM% /Append-Image /ImageFile:"%TMPIMAGE%" /Name:"Visual Studio 2017 %~1" /Description:"Visual Studio 2017 %~1" /CaptureDir:"%WorkFolder%"
- echo.
- goto :eof
- :================================================================================================================
- ::===============================================================================================================
- ::CHECKDETECTIONLEGALITY
- :CHECKDETECTIONLEGALITY
- if exist "%SETUPFILEPATH%%newfile%" (
- for /f "tokens=1 delims=" %%a in ("%SETUPFILEPATH%%~1") do (
- if %%~za lss 1048576 (
- color 0c
- echo 下载到的 %~2 大小不正确,按任意键退出批处理!
- pause >nul 2>&1
- goto :eof
- ) else (
- :: 替换旧的离线下载器
- move /y "%SETUPFILEPATH%%~1" "%SETUPFILEPATH%%~2" >nul 2>&1
- :: 解除离线下载器锁定
- powershell -command "Unblock-file –path '%regexSETUPFILEPATH%%~2'" >nul 2>&1 ||(
- color 0c
- echo 解除文件锁定失败,按任意键退出批处理!
- pause >nul 2>&1
- goto :eof
- )
- echo %~2 下载完成.
- )
- )
- ) else (
- color 0c
- echo 下载出错,未下载到 %~2 ,按任意键退出批处理!
- pause >nul 2>&1
- goto :eof
- )
- goto :eof
- :================================================================================================================
- ::===============================================================================================================
- ::GETVERSION
- :GETVERSION
- for /f "skip=2 tokens=2,3,4,5 delims==." %%a in ('wmic datafile where "Name= '%regexSETUPFILEPATH%%~1'" get Version /value') do (
- set "Version=%%a.%%b.%%c.%%d"
- )
- goto :eof
- :================================================================================================================
- ::===============================================================================================================
- ::GETOLDESDFILE
- :GETOLDESDFILE
- for %%a in (vs2017*.esd) do (set OLDESDFILE=%%a)
- goto :eof
- :================================================================================================================
- ::===============================================================================================================
- ::CLEANUP
- :CLEANUP
- del /f /q "%WorkFolder%\*.exe"
- del /f /q "%WorkFolder%\*.json"
- del /f /q "%WorkFolder%\*.opc"
- goto :eof
- :================================================================================================================
- ::===============================================================================================================
- ::MAKEESDFILE
- :MAKEESDFILE
- %DISM% /Export-Image /SourceImageFile:"%TMPIMAGE%" /SourceIndex:%~1 /DestinationImageFile:"%VS2017ESD%" /Compress:recovery
- echo.
- goto :eof
- :================================================================================================================
- ::===============================================================================================================
- ::EXIT
- :EXIT
- del /f /q %OLDESDFILE% >nul 2>&1
- del /f /q %TMPIMAGE% >nul 2>&1
- rmdir /s /q %SETUPFILEPATH% >nul 2>&1
- rmdir /s /q %WorkFolder% >nul 2>&1
- %DISM% /Get-ImageInfo /ImageFile:"%VS2017ESD%" > esdinfo.txt
- echo . >>esdinfo.txt
- echo Visual Studio 2017 序列号: >>esdinfo.txt
- echo 企业版:NJVYC-BMHX2-G77MM-4XJMR-6Q8QF >>esdinfo.txt
- echo 专业版:KBJFW-NXHK6-W4WJM-CRMQB-G3CDH >>esdinfo.txt
- ENDLOCAL
- exit
- :================================================================================================================
- ::===============================================================================================================
- ::TITLE
- :TITLE
- title %VS% 离线安装包下载/更新程序 - [lxb1628]
- goto:eof
- :================================================================================================================
- ::===============================================================================================================
- :: HEADER
- :HEADER
- cls
- call :Graphics
- echo:%~1
- call :Graphics
- echo:
- goto:eof
- :================================================================================================================
- ::===============================================================================================================
- :: GRAPHICS
- :Graphics
- if %cw% geq 150 echo.
- if %cw% geq 145 if %cw% lss 150 echo.
- if %cw% geq 140 if %cw% lss 145 echo.
- if %cw% geq 135 if %cw% lss 140 echo.
- if %cw% geq 130 if %cw% lss 135 echo.
- if %cw% geq 125 if %cw% lss 130 echo.
- if %cw% geq 120 if %cw% lss 125 echo.
- if %cw% geq 115 if %cw% lss 120 echo.
- if %cw% geq 110 if %cw% lss 115 echo.
- if %cw% geq 105 if %cw% lss 110 echo.
- if %cw% geq 100 if %cw% lss 105 echo.
- if %cw% geq 95 if %cw% lss 100 echo.
- if %cw% geq 90 if %cw% lss 95 echo.
- if %cw% geq 85 if %cw% lss 90 echo.
- if %cw% geq 80 if %cw% lss 85 echo.
- if %cw% lss 80 echo.
- goto:eof
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement