· 10 years ago · Sep 27, 2016, 05:22 AM
1@Echo Off
2SETLOCAL 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
15title Create Xbox One Drive
16set XBO_LOG=%TEMP%\create_xbox_drive.log
17set XBO_VER=2016.06.30
18
19echo Ver: %XBO_VER% > %XBO_LOG% 2>&1
20date /T >> %XBO_LOG% 2>&1
21time /T >> %XBO_LOG% 2>&1
22
23echo.
24echo **********************************************************************
25echo * create_xbox_drive.bat: *
26echo * This script creates a correctly formated Xbox One HDD against the *
27echo * drive YOU select. *
28echo * USE AT YOUR OWN RISK *
29echo * *
30echo * Created 2016.06.30 *
31echo * Last Updated %XBO_VER% *
32echo **********************************************************************
33echo.
34
35pause
36
37:: Changeable drive letters
38:: I've used higher letters to avoid conflicts
39set TEMP_CONTENT_LETTER=U:
40set USER_CONTENT_LETTER=V:
41set SYSTEM_SUPPORT_LETTER=W:
42set SYSTEM_UPDATE_LETTER=X:
43set 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/
49for /f "tokens=3" %%A in ('reg query "HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0" /v Identifier ^| findstr /b /r /c:" *Identifier"') do (set WINBIT=%%A)
50if "%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/
62set XBO_CALC=calc
63:: Check for the presence of a drive other than C:
64:: diskpart.exe http://support.microsoft.com/kb/300415/
65set XBO_DISKPART=%SystemRoot%\system32\diskpart
66set XBO_FORMAT=%SystemRoot%\system32\format
67set XBO_MOUNTVOL=%SystemRoot%\system32\mountvol
68
69set XBO_DP_SCRIPT=%TEMP%\dps.txt
70set XBO_GD_SCRIPT=%TEMP%\gds.txt
71set XBO_TIMEOUT=30
72
73:: Common GUIDs used by XBox One
74set DISK_GUID=A2344BDB-D6DE-4766-9EB5-4109A12228E5
75set TEMP_CONTENT_GUID=B3727DA5-A3AC-4B3D-9FD6-2EA54441011B
76set USER_CONTENT_GUID=869BB5E0-3356-4BE6-85F7-29323A675CC7
77set SYSTEM_SUPPORT_GUID=C90D7A47-CCB9-4CBA-8C66-0459F6B85724
78set SYSTEM_UPDATE_GUID=9A056AD7-32ED-4141-AEB1-AFB9BD5565DC
79set SYSTEM_UPDATE2_GUID=24B2197C-9D01-45F9-A8E1-DBBCFA161EB2
80
81:: Common partition sizes used by XBox One
82:: Xbox temp partition size (41G)
83set XBOX_TEMP_SIZE_IN_BYTES=44023414784
84:: Xbox support partition size (40G)
85set XBOX_SUPPORT_SIZE_IN_BYTES=42949672960
86:: Xbox update partition size (12G)
87set XBOX_UPDATE_SIZE_IN_BYTES=12884901888
88:: Xbox update 2 partition size (7G)
89set XBOX_UPDATE_SIZE2_IN_BYTES=7516192768
90
91
92:scan
93echo * Scanning for connected USB/SATA drives . . . *
94:: Rescan for newly added devices
95echo 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)
99echo list disk > %XBO_DP_SCRIPT%
100%XBO_DISKPART% /s %XBO_DP_SCRIPT%
101echo.
102%XBO_DISKPART% /s %XBO_DP_SCRIPT% >> %XBO_LOG% 2>&1
103echo. >> %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"
108for /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)
109set XBO_CNT=0
110set XBO_CHOICE=
111::echo * Testing: Valid drive count: '%XBO_DRIVE_COUNT%' *
112if %XBO_DRIVE_COUNT% EQU 0 goto ndrive
113
114:lchoice
115set /a XBO_CNT+=1
116set XBO_CHOICE=%XBO_CHOICE%%XBO_CNT%
117::echo * Testing: Valid drive list: '%XBO_CNT%' *
118if %XBO_CNT% EQU %XBO_DRIVE_COUNT% goto rchoice
119goto lchoice
120
121
122:rchoice
123::echo * Testing: Choice list: %XBO_CHOICE% *
124echo * Select disk to format as an Xbox One Drive . . . *
125choice.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)"
126set /a XBO_FORMAT_DRIVE=%ERRORLEVEL%-1
127if %XBO_FORMAT_DRIVE% EQU 0 goto edrive
128
129
130CALL :GetSect
131CALL :GetBlock
132echo Selected drive: %XBO_FORMAT_DRIVE% >> %XBO_LOG% 2>&1
133echo Sectors: %XBO_DISK_SECTORS% >> %XBO_LOG% 2>&1
134echo Logical block size: %DEV_LOGICAL_BLOCK_SIZE_IN_BYTES% >> %XBO_LOG% 2>&1
135CALL :ListPart
136
137
138choice.exe /M "WARNING: This will erase all data on this disk. Continue "
139if ERRORLEVEL 2 goto edrive
140
141echo.
142set XBO_MESSAGE=* Disk %XBO_FORMAT_DRIVE% will be formatted as an Xbox One . . . *
143echo %XBO_MESSAGE%
144echo %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
173CALL :Calc %XBOX_TEMP_SIZE_IN_BYTES%/1024/1024
174echo * Temp Content: MByte Size: '%XBO_CALC_RESULT%' * >> %XBO_LOG% 2>&1
175set /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
179echo.
180echo Select partition layout:
181set XBO_SIZE=
182echo (a) Autosize
183echo (b) 500GB Standard
184echo (c) 500GB Large
185echo (d) 1TB Standard
186echo (e) 1TB Large
187echo (f) 2TB Standard
188echo (g) 2TB Large
189echo.
190set /p XBO_SIZE=?
191echo.
192if not '%XBO_SIZE%'=='' set choice=%choice:~0,1%
193if '%XBO_SIZE%'=='a' goto sizea
194if '%XBO_SIZE%'=='b' goto sizeb
195if '%XBO_SIZE%'=='c' goto sizec
196if '%XBO_SIZE%'=='d' goto sized
197if '%XBO_SIZE%'=='e' goto sizee
198if '%XBO_SIZE%'=='f' goto sizef
199if '%XBO_SIZE%'=='g' goto sizeg
200echo "%XBO_SIZE%" is not valid please try again
201echo.
202goto selsize
203
204:: Partition 2: User Content
205:sizea
206:: Size of the device in bytes
207CALL :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 )
209CALL :Calc %XBO_CALC_RESULT%-%XBOX_TEMP_SIZE_IN_BYTES%-%XBOX_SUPPORT_SIZE_IN_BYTES%-%XBOX_UPDATE_SIZE_IN_BYTES%-%XBOX_UPDATE_SIZE2_IN_BYTES%
210echo * User Content: Byte Size: '%XBO_CALC_RESULT%' * >> %XBO_LOG% 2>&1
211:: Align the data to the nearest gig
212CALL :Calc %XBO_CALC_RESULT%/1024/1024/1024
213echo * User Content: GByte Size: '%XBO_CALC_RESULT%' * >> %XBO_LOG% 2>&1
214CALL :Calc %XBO_CALC_RESULT%*1024
215goto finsize
216
217:: Could force all drives >500GB to be 500GB equivalent
218:: XBox Original 500GB User Partion
219:sizeb
220CALL :Calc 391915765760/1024/1024
221goto finsize
222:: XBox Full 500GB User Partion
223:sizec
224CALL :Calc 392732606464/1024/1024
225goto finsize
226:: Could force all drives >1TB to be 1TB equivalent
227:: XBox Original 1TB User Partion
228:sized
229CALL :Calc 892279455744/1024/1024
230goto finsize
231:: XBox Full 1TB User Partion
232:sizee
233CALL :Calc 892828909568/1024/1024
234goto finsize
235:: Could force all drives >2TB to be 2TB equivalent
236:: XBox Original 2TB User Partion
237:sizef
238CALL :Calc 1893006835712/1024/1024
239goto finsize
240:: XBox Full 2TB User Partion
241:sizeg
242CALL :Calc 1893023612928/1024/1024
243goto finsize
244
245:finsize
246echo * User Content: MByte Size: '%XBO_CALC_RESULT%' * >> %XBO_LOG% 2>&1
247set /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
251CALL :Calc %XBOX_SUPPORT_SIZE_IN_BYTES%/1024/1024
252echo * System Support: MByte Size: '%XBO_CALC_RESULT%' * >> %XBO_LOG% 2>&1
253set /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
257CALL :Calc %XBOX_UPDATE_SIZE_IN_BYTES%/1024/1024
258echo * System Update: MByte Size: '%XBO_CALC_RESULT%' * >> %XBO_LOG% 2>&1
259set /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
263CALL :Calc %XBOX_UPDATE_SIZE2_IN_BYTES%/1024/1024
264echo * System Update 2: MByte Size: '%XBO_CALC_RESULT%' * >> %XBO_LOG% 2>&1
265set /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)
271echo * Removing existing partitions with %XBO_GDISK% . . . *
272echo o > %XBO_GD_SCRIPT%
273echo y >> %XBO_GD_SCRIPT%
274echo w >> %XBO_GD_SCRIPT%
275echo y >> %XBO_GD_SCRIPT%
276:: Make destructive GUID drive changes
277echo. >> %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
284echo * Creating new partitions with %XBO_GDISK% . . . *
285echo x > %XBO_GD_SCRIPT%
286echo g >> %XBO_GD_SCRIPT%
287echo %DISK_GUID% >> %XBO_GD_SCRIPT%
288
289echo m >> %XBO_GD_SCRIPT%
290echo n >> %XBO_GD_SCRIPT%
291echo 1 >> %XBO_GD_SCRIPT%
292echo. >> %XBO_GD_SCRIPT%
293echo +%XBOX_TEMP_SIZE_IN_MBYTES%M >> %XBO_GD_SCRIPT%
294echo 700 >> %XBO_GD_SCRIPT%
295echo x >> %XBO_GD_SCRIPT%
296echo c >> %XBO_GD_SCRIPT%
297:: Not needed when only one partition exists
298::echo 1 >> %XBO_GD_SCRIPT%
299echo %TEMP_CONTENT_GUID% >> %XBO_GD_SCRIPT%
300
301echo m >> %XBO_GD_SCRIPT%
302echo n >> %XBO_GD_SCRIPT%
303echo 2 >> %XBO_GD_SCRIPT%
304echo. >> %XBO_GD_SCRIPT%
305echo +%XBOX_USER_SIZE_IN_MBYTES%M >> %XBO_GD_SCRIPT%
306echo 700 >> %XBO_GD_SCRIPT%
307echo x >> %XBO_GD_SCRIPT%
308echo c >> %XBO_GD_SCRIPT%
309echo 2 >> %XBO_GD_SCRIPT%
310echo %USER_CONTENT_GUID% >> %XBO_GD_SCRIPT%
311
312echo m >> %XBO_GD_SCRIPT%
313echo n >> %XBO_GD_SCRIPT%
314echo 3 >> %XBO_GD_SCRIPT%
315echo. >> %XBO_GD_SCRIPT%
316echo +%XBOX_SUPPORT_SIZE_IN_MBYTES%M >> %XBO_GD_SCRIPT%
317echo 700 >> %XBO_GD_SCRIPT%
318echo x >> %XBO_GD_SCRIPT%
319echo c >> %XBO_GD_SCRIPT%
320echo 3 >> %XBO_GD_SCRIPT%
321echo %SYSTEM_SUPPORT_GUID% >> %XBO_GD_SCRIPT%
322
323echo m >> %XBO_GD_SCRIPT%
324echo n >> %XBO_GD_SCRIPT%
325echo 4 >> %XBO_GD_SCRIPT%
326echo. >> %XBO_GD_SCRIPT%
327echo +%XBOX_UPDATE_SIZE_IN_MBYTES%M >> %XBO_GD_SCRIPT%
328echo 700 >> %XBO_GD_SCRIPT%
329echo x >> %XBO_GD_SCRIPT%
330echo c >> %XBO_GD_SCRIPT%
331echo 4 >> %XBO_GD_SCRIPT%
332echo %SYSTEM_UPDATE_GUID% >> %XBO_GD_SCRIPT%
333
334echo m >> %XBO_GD_SCRIPT%
335echo n >> %XBO_GD_SCRIPT%
336echo 5 >> %XBO_GD_SCRIPT%
337echo. >> %XBO_GD_SCRIPT%
338echo +%XBOX_UPDATE_SIZE2_IN_MBYTES%M >> %XBO_GD_SCRIPT%
339echo 700 >> %XBO_GD_SCRIPT%
340echo x >> %XBO_GD_SCRIPT%
341echo c >> %XBO_GD_SCRIPT%
342echo 5 >> %XBO_GD_SCRIPT%
343echo %SYSTEM_UPDATE2_GUID% >> %XBO_GD_SCRIPT%
344
345echo w >> %XBO_GD_SCRIPT%
346echo 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
352echo.
353echo.
354:: gdisk creates partitions very quickly, perhaps too quickly?
355:: diskpart will not see the newly created volumes correctly without pausing
356choice.exe /N /C C /D C /T %XBO_TIMEOUT% /M "Giving USB/SATA devices time to settle . . ."
357
358:: Check volume status
359echo list volume > %XBO_DP_SCRIPT%
360%XBO_DISKPART% /s %XBO_DP_SCRIPT%
361echo.
362%XBO_DISKPART% /s %XBO_DP_SCRIPT% >> %XBO_LOG% 2>&1
363echo. >> %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
368echo * 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
377echo * Formatting and assigning drive letters with %XBO_DISKPART% . . .
378:: Rescan for newly added devices
379echo rescan > %XBO_DP_SCRIPT%
380echo list volume > %XBO_DP_SCRIPT%
381for /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
389echo list volume > %XBO_DP_SCRIPT%
390for /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
397echo list volume > %XBO_DP_SCRIPT%
398for /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
405echo list volume > %XBO_DP_SCRIPT%
406for /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
413echo list volume > %XBO_DP_SCRIPT%
414for /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
422echo list volume > %XBO_DP_SCRIPT%
423%XBO_DISKPART% /s %XBO_DP_SCRIPT%
424echo.
425%XBO_DISKPART% /s %XBO_DP_SCRIPT% >> %XBO_LOG% 2>&1
426echo. >> %XBO_LOG% 2>&1
427
428if exist %SYSTEM_UPDATE_LETTER%\ goto dexists
429goto ndrive
430
431:ndrive
432set XBO_MESSAGE=* No USB/SATA drives found *
433goto endbat
434
435:edrive
436set XBO_MESSAGE=* Xbox One Drive Selection Cancelled *
437goto endbat
438
439:dexists
440set XBO_MESSAGE=* Found the %SYSTEM_UPDATE_LETTER% drive. *
441echo.
442
443CALL :ListPart
444goto endbat
445
446
447
448:: FUNCTIONS
449
450:Calc
451:: Round down all sizes
452for /f "tokens=1" %%A in ('%XBO_CALC% Floor^(%1^)') do (
453 set XBO_CALC_RESULT=%%A
454)
455GOTO:EOF
456
457
458:GetSect
459echo p > %XBO_GD_SCRIPT%
460for /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)
463GOTO:EOF
464
465
466:GetBlock
467echo p > %XBO_GD_SCRIPT%
468for /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)
471GOTO:EOF
472
473
474:ListPart
475:: start of list_part_info.sh equivalent
476echo select disk %XBO_FORMAT_DRIVE% > %XBO_DP_SCRIPT%
477echo detail disk >> %XBO_DP_SCRIPT%
478:: Get Disk GUID
479for /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
483echo.
484echo GUID Device Name
485echo %XBO_DISK_GUID%
486
487echo. >> %XBO_LOG% 2>&1
488echo GUID Device Name >> %XBO_LOG% 2>&1
489echo %XBO_DISK_GUID% >> %XBO_LOG% 2>&1
490
491set /a XBO_PART_CNT=0
492:: Get Volume GUID(s)- 1st get drive letters
493for /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)
507echo.
508echo. >> %XBO_LOG% 2>&1
509GOTO:EOF
510:: end of list_part_info.sh equivalent
511
512
513:PrtPart
514echo !%1! !%2! '!%3!'
515echo !%1! !%2! '!%3!' >> %XBO_LOG% 2>&1
516GOTO: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.
522FOR %%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%%"
523GOTO:EOF
524
525:endbat
526echo.
527echo %XBO_MESSAGE%
528
529echo. >> %XBO_LOG% 2>&1
530echo %XBO_MESSAGE% >> %XBO_LOG% 2>&1
531echo. >> %XBO_LOG% 2>&1
532date /T >> %XBO_LOG% 2>&1
533time /T >> %XBO_LOG% 2>&1
534
535ENDLOCAL