Windows 检查所有驱动器(字母和自由大小)并比较高数字自由大小

Windows 检查所有驱动器(字母和自由大小)并比较高数字自由大小,windows,batch-file,cmd,Windows,Batch File,Cmd,我无法比较大量的PC磁盘 脚本: for /f "tokens=* delims== skip=1" %%x in ('"wmic.exe logicaldisk where DriveType=3 get DeviceID,FreeSpace,Size"') do ( for /f "tokens=1-3" %%a in ("%%x") do ( set "DiskID=%%a" & set "DiskFree=%%b" if !DiskFree

我无法比较大量的PC磁盘

脚本:

for /f "tokens=* delims== skip=1" %%x in ('"wmic.exe logicaldisk where DriveType=3 get DeviceID,FreeSpace,Size"') do (
    for /f "tokens=1-3" %%a in ("%%x") do (
        set "DiskID=%%a" & set "DiskFree=%%b"
        if !DiskFree! gtr !DiskFreeFinal! Set "DiskIDFinal=!DiskID!" && set "DiskFreeFinal=!DiskFree!"
    )
)
echo Biggest free space is on drive: %DiskIDFinal% (%DiskFreeFinal%)

输出大小不正确,比较结果不真实。

您的批处理经过重新处理,可以对大数(高达88817 PB)进行基于字符串的比较

样品输出(包括重熔线):


随附的
PowerShell
答案(尽管没有合适的标签),供参考和比较之用

$FixedDisks=Get WMIObject-Query“选择设备ID,从Win32释放空间\u LogicalDisk Where DriveType='3'”
$MostFreeSpace=0
$MostName=“Null”
ForEach($FixedDisks中的磁盘){
如果($Disk.FreeSpace-GT$MostFreeSpace){
$MostFreeSpace=$Disk.FreeSpace
$MostName=$Disk.DeviceID
}
}
写入主机“驱动器上的最大可用空间:$MostName($MostFreeSpace)”

您可以将数字保留为零,以便与相同的宽度进行比较,然后进行字符串比较:

@echo关闭
setlocal EnableDelayedExpansion
设置“diskdfinal=”&设置“DiskFreeFinal=000000000000000000000000000000”
对于/F“skip=1 delims=“%%x in('”wmic.exe logicaldisk,其中DriveType=3获取设备ID、自由空间、大小“'),请执行以下操作(
对于“%%x”中的/F“令牌=1-3”%%a,请执行以下操作(
rem//左边有24个零的焊盘编号,然后比较最右边的24位数字:
设置“DiskID=%%a”和设置“DiskFree=000000000000000000000000000000000000000000000000000000000000000000000000%%b”
如果“!DiskFree:~-24!”全球技术法规“!DiskFreeFinal:~-24!”(
设置“DiskIDFinal=!DiskID!”&设置“DiskFreeFinal=!DiskFree:~-24!”
)
)
)
rem//从最终数字中删除前导零:
对于(“!DiskFreeFinal!”)中的/F“tokens=*delims=0”%%z,请设置“DiskFreeFinal=%%z”
如果未定义DiskFreeFinal,则设置“DiskFreeFinal=0”
echo最大可用空间位于驱动器:%DiskIDFinal%(%DiskFreeFinal%)
端部

或者,您可以将数字分成两部分,并分别进行比较:

@echo关闭
setlocal EnableDelayedExpansion
设置“diskdfinal=”
设置/A“DiskFreeFinalHi=0,DiskFreeFinalLo=0”
对于/F“skip=1 delims=“%%x in('”wmic.exe logicaldisk,其中DriveType=3获取设备ID、自由空间、大小“'),请执行以下操作(
对于“%%x”中的/F“令牌=1-3”%%a,请执行以下操作(
设置“DiskID=%%a”和设置“DiskFreeLo=%%b”
rem//将数字分成两部分,使右侧部分有9位数字:
设置“DiskFreeHi=!DiskFreeLo:~,-9!”&设置“DiskFreeLo=!DiskFreeLo:~-9!”
对于(“!DiskFreeLo!”)中的/F“tokens=*delims=0”%%z,请设置“DiskFreeLo=%%z”
设置/A“DiskFreeHi+=0,DiskFreeLo+=0”
如果!DiskFreeHi!gtr!DiskFreeFinalHi(
设置“DiskIDFinal=!DiskID!”
设置/A“DiskFreeFinalHi=DiskFreeHi,DiskFreeFinalLo=DiskFreeLo”
)否则,如果!DiskFreeHi!eq!DiskFreeFinalHi(
如果!DiskFreeLo!gtr!DiskFreeFinalLo(
设置“DiskIDFinal=!DiskID!”
设置/A“DiskFreeFinalHi=DiskFreeHi,DiskFreeFinalLo=DiskFreeLo”
)
)
)
)
rem//重新组合数字的两部分:
设置“DiskFreeFinalLo=000000000%DiskFreeFinalLo%”
对于“%DiskFreeFinalHi%%DiskFreeFinalLo:~-9%”中的/F“令牌=*delims=0”%%%z,请设置“DiskFreeFinal=%z”
如果未定义DiskFreeFinal,则设置“DiskFreeFinal=0”
echo最大可用空间位于驱动器:%DiskIDFinal%(%DiskFreeFinal%)
端部

批处理仅限于有符号32位整数,因此它可以处理的最大数字为+/-2GB。若要比较较大的数字,请将它们视为长度相等的字符串,并用空格或零填充。看见
:: Q:\Test\2018\06\27\SO_51057439.cmd
@Echo off&SetLocal EnableDelayedExpansion
Set "Space=                    "
Set "DiskFreeFinal=%Space%"
for /f "tokens=* delims== skip=1" %%x in (
  '"wmic.exe logicaldisk where DriveType=3 get DeviceID,FreeSpace,Size"'
) do for /f "tokens=1-3" %%a in ("%%x") do (
    set "DiskFree=%Space%%%b"
    Rem Echo %%a !DiskFree:~-20!
    if "!DiskFree:~-20!" gtr "!DiskFreeFinal:~-20!" (
        set "DiskIDFinal=%%a"
        set "DiskFreeFinal=!DiskFree!"
    )
)
echo Biggest free space is on drive: %DiskIDFinal% (%DiskFreeFinal: =%)
> .\SO_51057439.cmd
A:           1049407488 1049407488
C:         113724567552 113724567552
D:        1090293293056 1090293293056
G:         778550509568 778550509568
H:             68505600 68505600
Biggest free space is on drive: D: (1090293293056)