C: \ drive жалпы кеңістігін және қол жетімді бос орынды алу үшін Windows пішіміндегі файл

Windows жүйесінде C: \ drive жалпы кеңістігін және бос орынды GB (giga bytes) -де қолжетімді ету үшін бот файлын қажет етемін және мәліметтермен мәтіндік файлды жасаңыз.

Ескерту: кез келген сыртқы утилиталарды пайдалануды қаламаймын.

4
Мен бағдарламалау мәселесін көрмеймін (бұл мәселе бойынша кез келген мәселе). Тиісті бағдарламалау сұрағына қайта кірген болсаңыз да, ана топтамасын пайдаланатын шешім жоқ, себебі ана тілі бумасы бүгінгі диск жетектерінде көретін үлкен сандарда математика орындай алмайды. Таза ана пакеті бос байттармен қамтамасыз ете алады, бірақ бос GB емес.
қосылды автор dbenham, көзі
Мен бағдарламалау мәселесін көрмеймін (бұл мәселе бойынша кез келген мәселе). Тиісті бағдарламалау сұрағына қайта кірген болсаңыз да, ана топтамасын пайдаланатын шешім жоқ, себебі ана тілі бумасы бүгінгі диск жетектерінде көретін үлкен сандарда математика орындай алмайды. Таза ана пакеті бос байттармен қамтамасыз ете алады, бірақ бос GB емес.
қосылды автор dbenham, көзі
«Сыртқы утилиталар» арқылы сіз fsutil, wmic және т.б. секілді Windows-мен бірге жеткізетін заттарды (нұсқасы?, 7?) Ғана пайдалануды қалайсыз ба? PowerShell немесе VBScript туралы не айтасыз? Windows-мен бірге жеткізіледі.
қосылды автор mojo, көзі
«Сыртқы утилиталар» арқылы сіз fsutil, wmic және т.б. секілді Windows-мен бірге жеткізетін заттарды (нұсқасы?, 7?) Ғана пайдалануды қалайсыз ба? PowerShell немесе VBScript туралы не айтасыз? Windows-мен бірге жеткізіледі.
қосылды автор mojo, көзі

7 жауаптар

Гбайт өлшемін алу үшін байт бойынша 9 санды кесіңіз:

@echo off & setlocal ENABLEDELAYEDEXPANSION
SET "volume=C:"
FOR /f "tokens=1*delims=:" %%i IN ('fsutil volume diskfree %volume%') DO (
    SET "diskfree=!disktotal!"
    SET "disktotal=!diskavail!"
    SET "diskavail=%%j"
)
FOR /f "tokens=1,2" %%i IN ("%disktotal% %diskavail%") DO SET "disktotal=%%i"& SET "diskavail=%%j"
(ECHO(Information for volume %volume%
ECHO(total  %disktotal:~0,-9% GB
ECHO(avail. %diskavail:~0,-9% GB)>size.txt
TYPE size.txt

cmd тек 2 ^ 31-1 (2,147,483,647 ~ 2,000001 Гигабайт) дейін санымен есептелуі мүмкін,

4
қосылды
Тілдік ерекшеліктеріне қарамастан, ешқашан қосымша белгі болмаса, онда ұзындығы -9 болуы керек. Өңделген код дұрыс емес. Бұл қосымша FOR/F, немесе % var: ~ 1, -9% болмағанда % var: ~ 0, -9% болуы керек. Менің ойымша, жетекші орын кеңістікте тұрақты.
қосылды автор dbenham, көзі
Мен түсіндіріп отырғанымдай, мен неліктен кейіпкерлердің кейіпкерлері болып табылады: /?
қосылды автор dbenham, көзі
FOR/F циклін тағы бір дисктермен = кеңістікте алдыңғы және артындағы кеңістіктерді мәннен шығару үшін қосуға болады. Сонда сіздің жауапыңыз аймақтық параметрлерге әсер етпейді.
қосылды автор dbenham, көзі
Менің Win7 машинамда нөмірден кейін ешқандай қосымша орын немесе басқа таңба жоқ, сондықтан ұзындығы -10 емес, -10 болуы керек. Сондай-ақ, бұл ГБ-қа жуықтай келеді. Менің ойымша, бұл сіз білесіз, бірақ сіздің жауап ретінде айтылған кейбір болуы мүмкін жаңылыстыратын.
қосылды автор dbenham, көзі
Шығарылым жергілікті/аймақтық параметрлерге байланысты (мысалы, робокопия), мен оны «американдық стильге» өзгертемін. ГБ мәндері математикалық түрде дұрыс емес және шағын көлемдер үшін +/- 1 Гбайт өзгеруі мүмкін.
қосылды автор Endoro, көзі
Менде жетекші орын бар (: және байт саны).
қосылды автор Endoro, көзі
@dbenham иә, сіз дұрыс және мен сәл шатастырып, рахмет!
қосылды автор Endoro, көзі

Гбайт өлшемін алу үшін байт бойынша 9 санды кесіңіз:

@echo off & setlocal ENABLEDELAYEDEXPANSION
SET "volume=C:"
FOR /f "tokens=1*delims=:" %%i IN ('fsutil volume diskfree %volume%') DO (
    SET "diskfree=!disktotal!"
    SET "disktotal=!diskavail!"
    SET "diskavail=%%j"
)
FOR /f "tokens=1,2" %%i IN ("%disktotal% %diskavail%") DO SET "disktotal=%%i"& SET "diskavail=%%j"
(ECHO(Information for volume %volume%
ECHO(total  %disktotal:~0,-9% GB
ECHO(avail. %diskavail:~0,-9% GB)>size.txt
TYPE size.txt

cmd тек 2 ^ 31-1 (2,147,483,647 ~ 2,000001 Гигабайт) дейін санымен есептелуі мүмкін,

4
қосылды
Тілдік ерекшеліктеріне қарамастан, ешқашан қосымша белгі болмаса, онда ұзындығы -9 болуы керек. Өңделген код дұрыс емес. Бұл қосымша FOR/F, немесе % var: ~ 1, -9% болмағанда % var: ~ 0, -9% болуы керек. Менің ойымша, жетекші орын кеңістікте тұрақты.
қосылды автор dbenham, көзі
Мен түсіндіріп отырғанымдай, мен неліктен кейіпкерлердің кейіпкерлері болып табылады: /?
қосылды автор dbenham, көзі
FOR/F циклін тағы бір дисктермен = кеңістікте алдыңғы және артындағы кеңістіктерді мәннен шығару үшін қосуға болады. Сонда сіздің жауапыңыз аймақтық параметрлерге әсер етпейді.
қосылды автор dbenham, көзі
Менің Win7 машинамда нөмірден кейін ешқандай қосымша орын немесе басқа таңба жоқ, сондықтан ұзындығы -10 емес, -10 болуы керек. Сондай-ақ, бұл ГБ-қа жуықтай келеді. Менің ойымша, бұл сіз білесіз, бірақ сіздің жауап ретінде айтылған кейбір болуы мүмкін жаңылыстыратын.
қосылды автор dbenham, көзі
Шығарылым жергілікті/аймақтық параметрлерге байланысты (мысалы, робокопия), мен оны «американдық стильге» өзгертемін. ГБ мәндері математикалық түрде дұрыс емес және шағын көлемдер үшін +/- 1 Гбайт өзгеруі мүмкін.
қосылды автор Endoro, көзі
Менде жетекші орын бар (: және байт саны).
қосылды автор Endoro, көзі
@dbenham иә, сіз дұрыс және мен сәл шатастырып, рахмет!
қосылды автор Endoro, көзі

Кез келген тәсілмен толық шешім емес, бірақ біреу оны пайдалы деп тапса болады:

dir | find "bytes"
2
қосылды

Кез келген тәсілмен толық шешім емес, бірақ біреу оны пайдалы деп тапса болады:

dir | find "bytes"
2
қосылды

Бұл PowerShell-ды пайдаланатындықтан, сіз қалаған нәрсе емес, бірақ «сыртқы утилиталар» - бұл біраз шуыл болып табылады және маған біраз жылжу бөлмесін қалдырады. Сонымен қатар, бұл бір лайнер.

SETLOCAL

FOR /F "usebackq tokens=1,2" %%f IN (`PowerShell -NoProfile -EncodedCommand "CgBnAHcAbQBpACAAVwBpAG4AMwAyAF8ATABvAGcAaQBjAGEAbABEAGkAcwBrACAALQBGAGkAbAB0AGUAcgAgACIAQwBhAHAAdABpAG8AbgA9ACcAQwA6ACcAIgB8ACUAewAkAGcAPQAxADAANwAzADcANAAxADgAMgA0ADsAWwBpAG4AdABdACQAZgA9ACgAJABfAC4ARgByAGUAZQBTAHAAYQBjAGUALwAkAGcAKQA7AFsAaQBuAHQAXQAkAHQAPQAoACQAXwAuAFMAaQB6AGUALwAkAGcAKQA7AFcAcgBpAHQAZQAtAEgAbwBzAHQAIAAoACQAdAAtACQAZgApACwAJABmAH0ACgA="`) DO ((SET U=%%f)&(SET F=%%g))

@ECHO Used: %U%
@ECHO Free: %F%

Пакеттік/CMD-нің барлығы дерлік нашар болғандықтан, WSI-ге жылдам және оңай қол жеткізуге мүмкіндік беретін PowerShell бағдарламасын пайдалануды шештім.

PowerShell коды:

Get-WMIObject -Query "SELECT * FROM Win32_LogicalDisk WHERE Caption='C:'" `
  | % { 
      $f = [System.Math]::Round($_.FreeSpace/1024/1024/1024,1);
      $t = [System.Math]::Round($_.Size/1024/1024/1024,1);
      Write-Host ('' + ($t-$f) + ',' + $f);
  }

Бұл үтірмен бөлінген екі мәнді шығарады. Енді, егер біз мұны тек FOR шілтерінде жасасақ едік!

PowerShell Base64-шифрланған пәрменді қабылдауға жақсы мүмкіндік береді (қашып кету және кодты оқу қиын), сондықтан бізге қажет болғанда бұл пәрменді мүмкіндігінше қысқартыңыз (кодталған жол - қатаңдық, мүлдем қажет емес). Сондай-ақ, оларды дөңгелектеген бүтін санға дейін мөлшерін азайттым. Төменгі қатарлы ондық сандарды тастауға қарағанда, бұл кем дегенде жақын.

Кодталған пәрменді кішірейту және оны PowerShell бағдарламасында кодтау келесідей:

$code = {
gwmi Win32_LogicalDisk -Filter "Caption='C:'"|%{$g=1073741824;[int]$f=($_.FreeSpace/$g);[int]$t=($_.Size/$g);Write-Host ($t-$f),$f}
}
$enc = [convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($code))
Write-Host $enc

(Қосымша ақпарат алу үшін PowerShell /? Қараңыз).

Мен бұл кез-келген Win7 немесе Win8 машинасында жұмыс істеуді күтемін. PoSH коды кез-келген жетілдірілген мүмкіндіктерге (кодты EncodedCommand битінен басқа) сүйенбейді, сондықтан PoSH XP немесе Vista құрылғысында орнатылса, оның жақсы мүмкіндігі бар. Мен Windows Update арқылы PoSH-ді басу тарихы туралы айта алмаймын, бірақ менің ойымша, бұл барлық жерде жұмыс істейтін болады.

1
қосылды

Бұл партияда жұмыс істеуі керек:

for /f "tokens=2" %%s in ('wmic volume get DriveLetter^, FreeSpace ^| findstr "^C:"') do set space=%%s
echo %space%
0
қосылды

Бұл партияда жұмыс істеуі керек:

for /f "tokens=2" %%s in ('wmic volume get DriveLetter^, FreeSpace ^| findstr "^C:"') do set space=%%s
echo %space%
0
қосылды