Próbuję utworzyć plik wsadowy, aby pobrać całkowity rozmiar i wolne miejsce na dysku C: \ serwerów (lokalnie uruchamiany skrypt). Potrzebuję również, aby dane wyjściowe były łatwe do odczytania, więc bajty nie będą działać, więc nie mam nic przeciwko linii poleceń, która tworzy plik temp .vbs.
Wygląda na to, że może to działać, ale formatowanie / matematyka jest nieprawidłowe.
setlocal
for /f "tokens=6" %a in ('fsutil volume diskfree C: ^| find "of bytes"') do set diskspace=%a
echo wsh.echo FormatNumber(cdbl(%diskspace%)/1024, 0) > %temp%.\tmp.vbs
for /f %a in ('cscript //nologo %temp%.\tmp.vbs') do set diskspace=%a
del %temp%.\tmp.vbs
echo For example %diskspace%
Powyższe polecenia pokazują również tylko wolne miejsce ... Chciałbym też całkowity rozmiar ... Zastanawiam się, czy poniższe polecenie może być lepsze do pobierania informacji:
WMIC LOGICALDISK GET Name,Size,FreeSpace | find /i "C:"
Zauważ też, że chcę, aby można było to skopiować / wkleić bezpośrednio w wierszu polecenia (nie wymuszone przez plik wsadowy). Usunąłem już „%%” z powyższego kodu.
Uwaga: Musi działać natywnie na serwerze 2003+ (więc program PowerShell jest niedostępny, podobnie jak wszelkie narzędzia innych firm).
źródło
Odpowiedzi:
Zgodnie z klauzulą „ wymuszone wymagania ”, następny
cmd
jeden wiersz może pomóc:Wyjście :
źródło
Zdaję sobie sprawę, że wyglądasz teraz jak VBS, ale PowerShell może to zrobić bardzo łatwo:
Pierwszy wiersz pobiera informacje o dysku z WMI (po prostu robi C: w tym przykładzie) i wybiera tylko wolne miejsce i całkowite rozmiary.
W następnych dwóch wierszach napisz do konsoli rozmiary wolnego miejsca i całkowite, sformatowane w GB, z obciętymi ułamkami.
Przykładowe dane wyjściowe (takie, jakie są):
źródło
W pliku wsadowym można uzyskać rozmiar dysku w GB określonego dysku za pomocą skryptu DiskPart. W tym przykładzie ustawiam konkretny indeks dysku zgodnie z jego nazwą modelu (zakładając, że na komputerze jest tylko jeden podobny). Zmień ciąg „ SATA Disk ”, aby pasował do modelu napędu. Możesz uzyskać nazwę modelu, uruchamiając polecenie „ wmic diskdrive get Model, Index ” w cmd.
Oczywiście możesz użyć innej właściwości dysku w poleceniu wmic - wpisz wmic diskdrive get /? aby uzyskać listę wszystkich właściwości dysku, których możesz użyć.
źródło
Jeśli musisz tylko sprawdzić, czy na dysku jest wystarczająca ilość wolnego miejsca (na przykład w celu zainstalowania lub skopiowania czegoś), możesz wypróbować zapytanie wmic w następujący sposób:
wmic LogicalDisk where "DeviceID='c:' and FreeSpace > 10737418240" get DeviceID 2>&1 ^ | find /i "c:" >nul || (echo not enough space&exit 1)
spowoduje to przerwanie wykonywania pliku wsadowego, jeśli na C jest mniej niż 10 Gb:
źródło
Podziel przez 1024, aby uzyskać kibajty (2 ^ 10). Podziel przez 1024 x 1024, aby uzyskać Mibytes (2 ^ 20). Podziel przez 1024 x 1024 x 1024, aby uzyskać Gibajty (2 ^ 30).
System Windows nazywa te jednostki kilobajtami, megabajtami i gigabajtami z powodów historycznych. Myślę, że moja obudowa ma rację.
Więc zmień swoje sumy.
źródło