Advertisement
Guest User

create_xbox_drive FRE

a guest
Sep 27th, 2016
477
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.07 KB | None | 0 0
  1. @Echo Off
  2. SETLOCAL EnableDelayedExpansion
  3.  
  4. :: Author: XFiX
  5. :: Date: 2016/06/30
  6. ::
  7. :: Summary:
  8. ::
  9. :: Create Xbox One filesystem
  10. ::
  11. :: Change History:
  12. ::
  13. :: 2016/06/30 - Initial Release - XFiX
  14.  
  15. title Create Xbox One Drive
  16. set XBO_LOG=%TEMP%\create_xbox_drive.log
  17. set XBO_VER=2016.06.30
  18.  
  19. echo Ver: %XBO_VER% > %XBO_LOG% 2>&1
  20. date /T >> %XBO_LOG% 2>&1
  21. time /T >> %XBO_LOG% 2>&1
  22.  
  23. echo.
  24. echo **********************************************************************
  25. echo * create_xbox_drive.bat: *
  26. echo * This script creates a correctly formated Xbox One HDD against the *
  27. echo * drive YOU select. *
  28. echo * USE AT YOUR OWN RISK *
  29. echo * *
  30. echo * Created 2016.06.30 *
  31. echo * Last Updated %XBO_VER% *
  32. echo **********************************************************************
  33. echo.
  34.  
  35. pause
  36.  
  37. :: Changeable drive letters
  38. :: I've used higher letters to avoid conflicts
  39. set TEMP_CONTENT_LETTER=U:
  40. set USER_CONTENT_LETTER=V:
  41. set SYSTEM_SUPPORT_LETTER=W:
  42. set SYSTEM_UPDATE_LETTER=X:
  43. set SYSTEM_UPDATE2_LETTER=Y:
  44.  
  45.  
  46. :: How To Check If Computer Is Running A 32 Bit or 64 Bit Operating System. http://support.microsoft.com/kb/556009
  47. :: GPT fdisk is a disk partitioning tool loosely modeled on Linux fdisk, but used for modifying GUID Partition Table (GPT) disks:
  48. :: https://sourceforge.net/projects/gptfdisk/
  49. for /f "tokens=3" %%A in ('reg query "HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0" /v Identifier ^| findstr /b /r /c:" *Identifier"') do (set WINBIT=%%A)
  50. if "%WINBIT%" == "x86" (
  51. echo "This is a 32 Bit Operating System"
  52. set XBO_GDISK=gdisk32
  53. ) else (
  54. echo "This is a 64 Bit Operating System"
  55. set XBO_GDISK=gdisk64
  56. )
  57.  
  58. :: Specify locations of the tools below
  59. :: Avoid: Invalid number. Numbers are limited to 32-bits of precision.
  60. :: A super-duper simple command line calculator that is fast and easy to use:
  61. :: https://sourceforge.net/projects/cmdlinecalc/
  62. set XBO_CALC=calc
  63. :: Check for the presence of a drive other than C:
  64. :: diskpart.exe http://support.microsoft.com/kb/300415/
  65. set XBO_DISKPART=%SystemRoot%\system32\diskpart
  66. set XBO_FORMAT=%SystemRoot%\system32\format
  67. set XBO_MOUNTVOL=%SystemRoot%\system32\mountvol
  68.  
  69. set XBO_DP_SCRIPT=%TEMP%\dps.txt
  70. set XBO_GD_SCRIPT=%TEMP%\gds.txt
  71. set XBO_TIMEOUT=30
  72.  
  73. :: Common GUIDs used by XBox One
  74. set DISK_GUID=A2344BDB-D6DE-4766-9EB5-4109A12228E5
  75. set TEMP_CONTENT_GUID=B3727DA5-A3AC-4B3D-9FD6-2EA54441011B
  76. set USER_CONTENT_GUID=869BB5E0-3356-4BE6-85F7-29323A675CC7
  77. set SYSTEM_SUPPORT_GUID=C90D7A47-CCB9-4CBA-8C66-0459F6B85724
  78. set SYSTEM_UPDATE_GUID=9A056AD7-32ED-4141-AEB1-AFB9BD5565DC
  79. set SYSTEM_UPDATE2_GUID=24B2197C-9D01-45F9-A8E1-DBBCFA161EB2
  80.  
  81. :: Common partition sizes used by XBox One
  82. :: Xbox temp partition size (41G)
  83. set XBOX_TEMP_SIZE_IN_BYTES=44023414784
  84. :: Xbox support partition size (40G)
  85. set XBOX_SUPPORT_SIZE_IN_BYTES=42949672960
  86. :: Xbox update partition size (12G)
  87. set XBOX_UPDATE_SIZE_IN_BYTES=12884901888
  88. :: Xbox update 2 partition size (7G)
  89. set XBOX_UPDATE_SIZE2_IN_BYTES=7516192768
  90.  
  91.  
  92. :scan
  93. echo * Scanning for connected USB/SATA drives . . . *
  94. :: Rescan for newly added devices
  95. echo rescan > %XBO_DP_SCRIPT%
  96. ::%XBO_DISKPART% /s %XBO_DP_SCRIPT%
  97. :: Look for drive candidates
  98. :: List will not include USB flash drives (according to Microsoft)
  99. echo list disk > %XBO_DP_SCRIPT%
  100. %XBO_DISKPART% /s %XBO_DP_SCRIPT%
  101. echo.
  102. %XBO_DISKPART% /s %XBO_DP_SCRIPT% >> %XBO_LOG% 2>&1
  103. echo. >> %XBO_LOG% 2>&1
  104.  
  105.  
  106. :: Ignore the header (Disk ###) and Disk 0 lines
  107. ::%XBO_DISKPART% /s %XBO_DP_SCRIPT% | findstr /b /r /c:" *Disk [^#0]" | find /c "Disk"
  108. for /f "tokens=*" %%A in ('%XBO_DISKPART% /s %XBO_DP_SCRIPT% ^| findstr /b /r /c:" *Disque [^#0]" ^| find /c "Disque"') do (set XBO_DRIVE_COUNT=%%A)
  109. set XBO_CNT=0
  110. set XBO_CHOICE=
  111. ::echo * Testing: Valid drive count: '%XBO_DRIVE_COUNT%' *
  112. if %XBO_DRIVE_COUNT% EQU 0 goto ndrive
  113.  
  114. :lchoice
  115. set /a XBO_CNT+=1
  116. set XBO_CHOICE=%XBO_CHOICE%%XBO_CNT%
  117. ::echo * Testing: Valid drive list: '%XBO_CNT%' *
  118. if %XBO_CNT% EQU %XBO_DRIVE_COUNT% goto rchoice
  119. goto lchoice
  120.  
  121.  
  122. :rchoice
  123. ::echo * Testing: Choice list: %XBO_CHOICE% *
  124. echo * Select disk to format as an Xbox One Drive . . . *
  125. choice.exe /C 0%XBO_CHOICE% /D 0 /T %XBO_TIMEOUT% /M "Press 0 to CANCEL or use a Disk Number from the list above (default 0 in %XBO_TIMEOUT% seconds)"
  126. set /a XBO_FORMAT_DRIVE=%ERRORLEVEL%-1
  127. if %XBO_FORMAT_DRIVE% EQU 0 goto edrive
  128.  
  129.  
  130. CALL :GetSect
  131. CALL :GetBlock
  132. echo Selected drive: %XBO_FORMAT_DRIVE% >> %XBO_LOG% 2>&1
  133. echo Sectors: %XBO_DISK_SECTORS% >> %XBO_LOG% 2>&1
  134. echo Logical block size: %DEV_LOGICAL_BLOCK_SIZE_IN_BYTES% >> %XBO_LOG% 2>&1
  135. CALL :ListPart
  136.  
  137.  
  138. choice.exe /M "WARNING: This will erase all data on this disk. Continue "
  139. if ERRORLEVEL 2 goto edrive
  140.  
  141. echo.
  142. set XBO_MESSAGE=* Disk %XBO_FORMAT_DRIVE% will be formatted as an Xbox One . . . *
  143. echo %XBO_MESSAGE%
  144. echo %XBO_MESSAGE% >> %XBO_LOG% 2>&1
  145. :rpart
  146.  
  147.  
  148. :: Start of diskpart remove existing partitions (works but clunky since partitions have to be removed individually)
  149. :: Replaced with gdisk (remove existing partitions)
  150. ::echo select disk %XBO_FORMAT_DRIVE% > %XBO_DP_SCRIPT%
  151. ::echo list partition >> %XBO_DP_SCRIPT%
  152. :: Determine the number of partitions to delete
  153. ::for /f "tokens=2" %%A in ('%XBO_DISKPART% /s %XBO_DP_SCRIPT% ^| findstr /b /r /c:" *Partition [^#]" ^| sort /r') do (
  154. :: When the first partition is removed all other partitions cascade down
  155. ::echo select partition %%A >> !XBO_DP_SCRIPT!
  156. ::echo delete partition override >> !XBO_DP_SCRIPT!
  157. ::)
  158.  
  159. ::echo p > %XBO_GD_SCRIPT%
  160. ::for /f "tokens=*" %%A in ('%XBO_GDISK% \\.\physicaldrive%XBO_FORMAT_DRIVE% ^< %XBO_GD_SCRIPT% ^| find /c "GPT: present"') do (set XBO_IS_GPT=%%A)
  161. :: If already a GPT disk skip "convert gpt"
  162. ::if %XBO_IS_GPT% EQU 1 goto sgpt
  163. ::echo convert gpt >> %XBO_DP_SCRIPT%
  164. :sgpt
  165.  
  166. :: Make destructive drive changes
  167. ::%XBO_DISKPART% /s %XBO_DP_SCRIPT%
  168. :: End of diskpart remove existing partitions (works but clunky since partitions have to be removed individually)
  169.  
  170.  
  171. :: Calculate partition sizes, creation moved to gdisk below
  172. :: Partition 1: Temp Content
  173. CALL :Calc %XBOX_TEMP_SIZE_IN_BYTES%/1024/1024
  174. echo * Temp Content: MByte Size: '%XBO_CALC_RESULT%' * >> %XBO_LOG% 2>&1
  175. set /a XBOX_TEMP_SIZE_IN_MBYTES=%XBO_CALC_RESULT%
  176. ::echo create partition primary size=%XBOX_TEMP_SIZE_IN_MBYTES% offset=1024 >> %XBO_DP_SCRIPT%
  177.  
  178. :selsize
  179. echo.
  180. echo Select partition layout:
  181. set XBO_SIZE=
  182. echo (a) Autosize
  183. echo (b) 500GB Standard
  184. echo (c) 500GB Large
  185. echo (d) 1TB Standard
  186. echo (e) 1TB Large
  187. echo (f) 2TB Standard
  188. echo (g) 2TB Large
  189. echo.
  190. set /p XBO_SIZE=?
  191. echo.
  192. if not '%XBO_SIZE%'=='' set choice=%choice:~0,1%
  193. if '%XBO_SIZE%'=='a' goto sizea
  194. if '%XBO_SIZE%'=='b' goto sizeb
  195. if '%XBO_SIZE%'=='c' goto sizec
  196. if '%XBO_SIZE%'=='d' goto sized
  197. if '%XBO_SIZE%'=='e' goto sizee
  198. if '%XBO_SIZE%'=='f' goto sizef
  199. if '%XBO_SIZE%'=='g' goto sizeg
  200. echo "%XBO_SIZE%" is not valid please try again
  201. echo.
  202. goto selsize
  203.  
  204. :: Partition 2: User Content
  205. :sizea
  206. :: Size of the device in bytes
  207. CALL :Calc %XBO_DISK_SECTORS%*%DEV_LOGICAL_BLOCK_SIZE_IN_BYTES%
  208. :: New user content partition size (eg. Using a 500G drive it's rougly 392733679616 bytes = 365G )
  209. CALL :Calc %XBO_CALC_RESULT%-%XBOX_TEMP_SIZE_IN_BYTES%-%XBOX_SUPPORT_SIZE_IN_BYTES%-%XBOX_UPDATE_SIZE_IN_BYTES%-%XBOX_UPDATE_SIZE2_IN_BYTES%
  210. echo * User Content: Byte Size: '%XBO_CALC_RESULT%' * >> %XBO_LOG% 2>&1
  211. :: Align the data to the nearest gig
  212. CALL :Calc %XBO_CALC_RESULT%/1024/1024/1024
  213. echo * User Content: GByte Size: '%XBO_CALC_RESULT%' * >> %XBO_LOG% 2>&1
  214. CALL :Calc %XBO_CALC_RESULT%*1024
  215. goto finsize
  216.  
  217. :: Could force all drives >500GB to be 500GB equivalent
  218. :: XBox Original 500GB User Partion
  219. :sizeb
  220. CALL :Calc 391915765760/1024/1024
  221. goto finsize
  222. :: XBox Full 500GB User Partion
  223. :sizec
  224. CALL :Calc 392732606464/1024/1024
  225. goto finsize
  226. :: Could force all drives >1TB to be 1TB equivalent
  227. :: XBox Original 1TB User Partion
  228. :sized
  229. CALL :Calc 892279455744/1024/1024
  230. goto finsize
  231. :: XBox Full 1TB User Partion
  232. :sizee
  233. CALL :Calc 892828909568/1024/1024
  234. goto finsize
  235. :: Could force all drives >2TB to be 2TB equivalent
  236. :: XBox Original 2TB User Partion
  237. :sizef
  238. CALL :Calc 1893006835712/1024/1024
  239. goto finsize
  240. :: XBox Full 2TB User Partion
  241. :sizeg
  242. CALL :Calc 1893023612928/1024/1024
  243. goto finsize
  244.  
  245. :finsize
  246. echo * User Content: MByte Size: '%XBO_CALC_RESULT%' * >> %XBO_LOG% 2>&1
  247. set /a XBOX_USER_SIZE_IN_MBYTES=%XBO_CALC_RESULT%
  248. ::echo create partition primary size=%XBOX_USER_SIZE_IN_MBYTES% >> %XBO_DP_SCRIPT%
  249.  
  250. :: Partition 3: System Support
  251. CALL :Calc %XBOX_SUPPORT_SIZE_IN_BYTES%/1024/1024
  252. echo * System Support: MByte Size: '%XBO_CALC_RESULT%' * >> %XBO_LOG% 2>&1
  253. set /a XBOX_SUPPORT_SIZE_IN_MBYTES=%XBO_CALC_RESULT%
  254. ::echo create partition primary size=%XBOX_SUPPORT_SIZE_IN_MBYTES% >> %XBO_DP_SCRIPT%
  255.  
  256. :: Partition 4: System Update
  257. CALL :Calc %XBOX_UPDATE_SIZE_IN_BYTES%/1024/1024
  258. echo * System Update: MByte Size: '%XBO_CALC_RESULT%' * >> %XBO_LOG% 2>&1
  259. set /a XBOX_UPDATE_SIZE_IN_MBYTES=%XBO_CALC_RESULT%
  260. ::echo create partition primary size=%XBOX_UPDATE_SIZE_IN_MBYTES% >> %XBO_DP_SCRIPT%
  261.  
  262. :: Partition 5: System Update 2
  263. CALL :Calc %XBOX_UPDATE_SIZE2_IN_BYTES%/1024/1024
  264. echo * System Update 2: MByte Size: '%XBO_CALC_RESULT%' * >> %XBO_LOG% 2>&1
  265. set /a XBOX_UPDATE_SIZE2_IN_MBYTES=%XBO_CALC_RESULT%
  266. ::echo create partition primary size=%XBOX_UPDATE_SIZE2_IN_MBYTES% >> %XBO_DP_SCRIPT%
  267.  
  268.  
  269. :: Start of gdisk remove existing partitions (destroys all with one option)
  270. :: Replaced with diskpart (remove existing partitions)
  271. echo * Removing existing partitions with %XBO_GDISK% . . . *
  272. echo o > %XBO_GD_SCRIPT%
  273. echo y >> %XBO_GD_SCRIPT%
  274. echo w >> %XBO_GD_SCRIPT%
  275. echo y >> %XBO_GD_SCRIPT%
  276. :: Make destructive GUID drive changes
  277. echo. >> %XBO_LOG% 2>&1
  278. %XBO_GDISK% \\.\physicaldrive%XBO_FORMAT_DRIVE% < %XBO_GD_SCRIPT% >> %XBO_LOG% 2>&1
  279. :: End of gdisk remove existing partitions (destroys all with one option)
  280.  
  281.  
  282. :: Create paritions and set GUID values
  283. :: Windows doesn't like this much, works fine but Windows loses drive letters and things
  284. echo * Creating new partitions with %XBO_GDISK% . . . *
  285. echo x > %XBO_GD_SCRIPT%
  286. echo g >> %XBO_GD_SCRIPT%
  287. echo %DISK_GUID% >> %XBO_GD_SCRIPT%
  288.  
  289. echo m >> %XBO_GD_SCRIPT%
  290. echo n >> %XBO_GD_SCRIPT%
  291. echo 1 >> %XBO_GD_SCRIPT%
  292. echo. >> %XBO_GD_SCRIPT%
  293. echo +%XBOX_TEMP_SIZE_IN_MBYTES%M >> %XBO_GD_SCRIPT%
  294. echo 700 >> %XBO_GD_SCRIPT%
  295. echo x >> %XBO_GD_SCRIPT%
  296. echo c >> %XBO_GD_SCRIPT%
  297. :: Not needed when only one partition exists
  298. ::echo 1 >> %XBO_GD_SCRIPT%
  299. echo %TEMP_CONTENT_GUID% >> %XBO_GD_SCRIPT%
  300.  
  301. echo m >> %XBO_GD_SCRIPT%
  302. echo n >> %XBO_GD_SCRIPT%
  303. echo 2 >> %XBO_GD_SCRIPT%
  304. echo. >> %XBO_GD_SCRIPT%
  305. echo +%XBOX_USER_SIZE_IN_MBYTES%M >> %XBO_GD_SCRIPT%
  306. echo 700 >> %XBO_GD_SCRIPT%
  307. echo x >> %XBO_GD_SCRIPT%
  308. echo c >> %XBO_GD_SCRIPT%
  309. echo 2 >> %XBO_GD_SCRIPT%
  310. echo %USER_CONTENT_GUID% >> %XBO_GD_SCRIPT%
  311.  
  312. echo m >> %XBO_GD_SCRIPT%
  313. echo n >> %XBO_GD_SCRIPT%
  314. echo 3 >> %XBO_GD_SCRIPT%
  315. echo. >> %XBO_GD_SCRIPT%
  316. echo +%XBOX_SUPPORT_SIZE_IN_MBYTES%M >> %XBO_GD_SCRIPT%
  317. echo 700 >> %XBO_GD_SCRIPT%
  318. echo x >> %XBO_GD_SCRIPT%
  319. echo c >> %XBO_GD_SCRIPT%
  320. echo 3 >> %XBO_GD_SCRIPT%
  321. echo %SYSTEM_SUPPORT_GUID% >> %XBO_GD_SCRIPT%
  322.  
  323. echo m >> %XBO_GD_SCRIPT%
  324. echo n >> %XBO_GD_SCRIPT%
  325. echo 4 >> %XBO_GD_SCRIPT%
  326. echo. >> %XBO_GD_SCRIPT%
  327. echo +%XBOX_UPDATE_SIZE_IN_MBYTES%M >> %XBO_GD_SCRIPT%
  328. echo 700 >> %XBO_GD_SCRIPT%
  329. echo x >> %XBO_GD_SCRIPT%
  330. echo c >> %XBO_GD_SCRIPT%
  331. echo 4 >> %XBO_GD_SCRIPT%
  332. echo %SYSTEM_UPDATE_GUID% >> %XBO_GD_SCRIPT%
  333.  
  334. echo m >> %XBO_GD_SCRIPT%
  335. echo n >> %XBO_GD_SCRIPT%
  336. echo 5 >> %XBO_GD_SCRIPT%
  337. echo. >> %XBO_GD_SCRIPT%
  338. echo +%XBOX_UPDATE_SIZE2_IN_MBYTES%M >> %XBO_GD_SCRIPT%
  339. echo 700 >> %XBO_GD_SCRIPT%
  340. echo x >> %XBO_GD_SCRIPT%
  341. echo c >> %XBO_GD_SCRIPT%
  342. echo 5 >> %XBO_GD_SCRIPT%
  343. echo %SYSTEM_UPDATE2_GUID% >> %XBO_GD_SCRIPT%
  344.  
  345. echo w >> %XBO_GD_SCRIPT%
  346. echo y >> %XBO_GD_SCRIPT%
  347.  
  348. :: Make destructive GUID drive changes
  349. %XBO_GDISK% \\.\physicaldrive%XBO_FORMAT_DRIVE% < %XBO_GD_SCRIPT% >> %XBO_LOG% 2>&1
  350.  
  351.  
  352. echo.
  353. echo.
  354. :: gdisk creates partitions very quickly, perhaps too quickly?
  355. :: diskpart will not see the newly created volumes correctly without pausing
  356. choice.exe /N /C C /D C /T %XBO_TIMEOUT% /M "Giving USB/SATA devices time to settle . . ."
  357.  
  358. :: Check volume status
  359. echo list volume > %XBO_DP_SCRIPT%
  360. %XBO_DISKPART% /s %XBO_DP_SCRIPT%
  361. echo.
  362. %XBO_DISKPART% /s %XBO_DP_SCRIPT% >> %XBO_LOG% 2>&1
  363. echo. >> %XBO_LOG% 2>&1
  364.  
  365.  
  366. :: Use format instead of diskpart to add a volume label
  367. :: format doesn't support spaces in volume labels, fix with diskpart in next step
  368. echo * Formatting new partitions with %XBO_FORMAT% . . . *
  369. %XBO_FORMAT% \\?\Volume{%TEMP_CONTENT_GUID%} /FS:NTFS /V:Temp_Content /Q /Y >> %XBO_LOG% 2>&1
  370. %XBO_FORMAT% \\?\Volume{%USER_CONTENT_GUID%} /FS:NTFS /V:User_Content /Q /Y >> %XBO_LOG% 2>&1
  371. %XBO_FORMAT% \\?\Volume{%SYSTEM_SUPPORT_GUID%} /FS:NTFS /V:System_Support /Q /Y >> %XBO_LOG% 2>&1
  372. %XBO_FORMAT% \\?\Volume{%SYSTEM_UPDATE_GUID%} /FS:NTFS /V:System_Update /Q /Y >> %XBO_LOG% 2>&1
  373. %XBO_FORMAT% \\?\Volume{%SYSTEM_UPDATE2_GUID%} /FS:NTFS /V:System_Update_2 /Q /Y >> %XBO_LOG% 2>&1
  374.  
  375.  
  376. :: Finally use diskpart to format and assign drive letters so that we can copy files
  377. echo * Formatting and assigning drive letters with %XBO_DISKPART% . . .
  378. :: Rescan for newly added devices
  379. echo rescan > %XBO_DP_SCRIPT%
  380. echo list volume > %XBO_DP_SCRIPT%
  381. for /f "tokens=2" %%A in ('%XBO_DISKPART% /s %XBO_DP_SCRIPT% ^| findstr /b /r /c:".*Temp_Conte"') do (
  382. echo select volume %%A > !XBO_DP_SCRIPT!
  383. echo format FS=NTFS LABEL="Temp Content" QUICK NOERR >> !XBO_DP_SCRIPT!
  384. echo assign letter=!TEMP_CONTENT_LETTER! NOERR >> !XBO_DP_SCRIPT!
  385. !XBO_DISKPART! /s !XBO_DP_SCRIPT! >> !XBO_LOG! 2>&1
  386. )
  387.  
  388.  
  389. echo list volume > %XBO_DP_SCRIPT%
  390. for /f "tokens=2" %%A in ('%XBO_DISKPART% /s %XBO_DP_SCRIPT% ^| findstr /b /r /c:".*User_Conte"') do (
  391. echo select volume %%A > !XBO_DP_SCRIPT!
  392. echo format FS=NTFS LABEL="User Content" QUICK NOERR >> !XBO_DP_SCRIPT!
  393. echo assign letter=!USER_CONTENT_LETTER! NOERR >> !XBO_DP_SCRIPT!
  394. !XBO_DISKPART! /s !XBO_DP_SCRIPT! >> !XBO_LOG! 2>&1
  395. )
  396.  
  397. echo list volume > %XBO_DP_SCRIPT%
  398. for /f "tokens=2" %%A in ('%XBO_DISKPART% /s %XBO_DP_SCRIPT% ^| findstr /b /r /c:".*System_Sup"') do (
  399. echo select volume %%A > !XBO_DP_SCRIPT!
  400. echo format FS=NTFS LABEL="System Support" QUICK NOERR >> !XBO_DP_SCRIPT!
  401. echo assign letter=!SYSTEM_SUPPORT_LETTER! NOERR >> !XBO_DP_SCRIPT!
  402. !XBO_DISKPART! /s !XBO_DP_SCRIPT! >> !XBO_LOG! 2>&1
  403. )
  404.  
  405. echo list volume > %XBO_DP_SCRIPT%
  406. for /f "tokens=2" %%A in ('%XBO_DISKPART% /s %XBO_DP_SCRIPT% ^| findstr /b /r /c:".*System_Upd.*12"') do (
  407. echo select volume %%A > !XBO_DP_SCRIPT!
  408. echo format FS=NTFS LABEL="System Update" QUICK NOERR >> !XBO_DP_SCRIPT!
  409. echo assign letter=!SYSTEM_UPDATE_LETTER! NOERR >> !XBO_DP_SCRIPT!
  410. !XBO_DISKPART! /s !XBO_DP_SCRIPT! >> !XBO_LOG! 2>&1
  411. )
  412.  
  413. echo list volume > %XBO_DP_SCRIPT%
  414. for /f "tokens=2" %%A in ('%XBO_DISKPART% /s %XBO_DP_SCRIPT% ^| findstr /b /r /c:".*System_Upd.*7168"') do (
  415. echo select volume %%A > !XBO_DP_SCRIPT!
  416. echo format FS=NTFS LABEL="System Update 2" QUICK NOERR >> !XBO_DP_SCRIPT!
  417. echo assign letter=!SYSTEM_UPDATE2_LETTER! NOERR >> !XBO_DP_SCRIPT!
  418. !XBO_DISKPART! /s !XBO_DP_SCRIPT! >> !XBO_LOG! 2>&1
  419. )
  420.  
  421. :: Check volume status
  422. echo list volume > %XBO_DP_SCRIPT%
  423. %XBO_DISKPART% /s %XBO_DP_SCRIPT%
  424. echo.
  425. %XBO_DISKPART% /s %XBO_DP_SCRIPT% >> %XBO_LOG% 2>&1
  426. echo. >> %XBO_LOG% 2>&1
  427.  
  428. if exist %SYSTEM_UPDATE_LETTER%\ goto dexists
  429. goto ndrive
  430.  
  431. :ndrive
  432. set XBO_MESSAGE=* No USB/SATA drives found *
  433. goto endbat
  434.  
  435. :edrive
  436. set XBO_MESSAGE=* Xbox One Drive Selection Cancelled *
  437. goto endbat
  438.  
  439. :dexists
  440. set XBO_MESSAGE=* Found the %SYSTEM_UPDATE_LETTER% drive. *
  441. echo.
  442.  
  443. CALL :ListPart
  444. goto endbat
  445.  
  446.  
  447.  
  448. :: FUNCTIONS
  449.  
  450. :Calc
  451. :: Round down all sizes
  452. for /f "tokens=1" %%A in ('%XBO_CALC% Floor^(%1^)') do (
  453. set XBO_CALC_RESULT=%%A
  454. )
  455. GOTO:EOF
  456.  
  457.  
  458. :GetSect
  459. echo p > %XBO_GD_SCRIPT%
  460. for /f "tokens=7" %%A in ('%XBO_GDISK% \\.\physicaldrive%XBO_FORMAT_DRIVE% ^< %XBO_GD_SCRIPT% ^| findstr /b /r /c:".*Disk \\\\.\\physicaldrive.:"') do (
  461. set XBO_DISK_SECTORS=%%A
  462. )
  463. GOTO:EOF
  464.  
  465.  
  466. :GetBlock
  467. echo p > %XBO_GD_SCRIPT%
  468. for /f "tokens=4" %%A in ('%XBO_GDISK% \\.\physicaldrive%XBO_FORMAT_DRIVE% ^< %XBO_GD_SCRIPT% ^| findstr /b /r /c:".*Logical sector size:"') do (
  469. set DEV_LOGICAL_BLOCK_SIZE_IN_BYTES=%%A
  470. )
  471. GOTO:EOF
  472.  
  473.  
  474. :ListPart
  475. :: start of list_part_info.sh equivalent
  476. echo select disk %XBO_FORMAT_DRIVE% > %XBO_DP_SCRIPT%
  477. echo detail disk >> %XBO_DP_SCRIPT%
  478. :: Get Disk GUID
  479. for /f "tokens=2* delims={}" %%A in ('%XBO_DISKPART% /s %XBO_DP_SCRIPT% ^| findstr /b /r /c:"Id. de disque"') do (
  480. set XBO_DISK_GUID=%%A
  481. )
  482.  
  483. echo.
  484. echo GUID Device Name
  485. echo %XBO_DISK_GUID%
  486.  
  487. echo. >> %XBO_LOG% 2>&1
  488. echo GUID Device Name >> %XBO_LOG% 2>&1
  489. echo %XBO_DISK_GUID% >> %XBO_LOG% 2>&1
  490.  
  491. set /a XBO_PART_CNT=0
  492. :: Get Volume GUID(s)- 1st get drive letters
  493. for /f "tokens=3,4,5" %%A in ('%XBO_DISKPART% /s %XBO_DP_SCRIPT% ^| findstr /b /r /c:" *Volumen [^#0]"') do (
  494. set /a XBO_PART_CNT+=1
  495. set XBO_PART!XBO_PART_CNT!_LETTER=%%A:
  496. :: 2nd get GUID(s)
  497. for /f "tokens=2 delims={}" %%G in ('%XBO_MOUNTVOL% %%A:\ /L ^| findstr /b /r /c:" *\\\\?\\Volume"') do (
  498. set XBO_PART!XBO_PART_CNT!_GUID=%%G
  499. CALL :UpCase XBO_PART!XBO_PART_CNT!_GUID
  500. )
  501. :: 3rd get volume labels
  502. for /f "tokens=8*" %%V in ('vol %%A: ^| findstr /b /r /c:" *El volumen de la unidad"') do (
  503. set XBO_PART!XBO_PART_CNT!_NAME=%%V %%W
  504. )
  505. CALL :PrtPart XBO_PART!XBO_PART_CNT!_GUID XBO_PART!XBO_PART_CNT!_LETTER XBO_PART!XBO_PART_CNT!_NAME
  506. )
  507. echo.
  508. echo. >> %XBO_LOG% 2>&1
  509. GOTO:EOF
  510. :: end of list_part_info.sh equivalent
  511.  
  512.  
  513. :PrtPart
  514. echo !%1! !%2! '!%3!'
  515. echo !%1! !%2! '!%3!' >> %XBO_LOG% 2>&1
  516. GOTO:EOF
  517.  
  518.  
  519. :UpCase
  520. :: Subroutine to convert a variable VALUE to all UPPER CASE.
  521. :: The argument for this subroutine is the variable NAME.
  522. FOR %%i IN ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I" "j=J" "k=K" "l=L" "m=M" "n=N" "o=O" "p=P" "q=Q" "r=R" "s=S" "t=T" "u=U" "v=V" "w=W" "x=X" "y=Y" "z=Z") DO CALL SET "%1=%%%1:%%~i%%"
  523. GOTO:EOF
  524.  
  525. :endbat
  526. echo.
  527. echo %XBO_MESSAGE%
  528.  
  529. echo. >> %XBO_LOG% 2>&1
  530. echo %XBO_MESSAGE% >> %XBO_LOG% 2>&1
  531. echo. >> %XBO_LOG% 2>&1
  532. date /T >> %XBO_LOG% 2>&1
  533. time /T >> %XBO_LOG% 2>&1
  534.  
  535. ENDLOCAL
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement