Czy istnieje sposób na uzyskanie ilości wolnego miejsca na dysku lub folderu w CMD bez konieczności instalowania aplikacji innych firm?
Mam CMD, który kopiuje duży plik do podanego katalogu i mógłby oczywiście skorzystać z powrotu poziomu błędu z polecenia copy, ale potem muszę poczekać na czas potrzebny do skopiowania pliku (np ... do tego wtedy dysk jest pełny i operacja kopiowania kończy się niepowodzeniem).
Chciałbym wiedzieć, zanim zacznę kopiować, czy to w ogóle jakiś pomysł. Wypróbowano narzędzie DU.EXE firmy Sysinternals, ale pokazuje ono tylko zajęte miejsce.
Odpowiedzi:
Jeśli uruchomisz „
dir c:\
”, ostatnia linia zwróci wolne miejsce na dysku.Edycja: lepsze rozwiązanie: „
fsutil volume diskfree c:
”źródło
dir ..*
(lubdir c:\thing\..*
) pokaże bardzo krótką listę, niezależnie od tego, czy w katalogu jest zero lub wiele plików.Możliwe rozwiązanie:
bardziej „ zaawansowane rozwiązanie ”, dla systemu Windows XP i nowszych:
Windows Management Instrumentation wiersza polecenia (WMIC) narzędzia (Wmic.exe) może gromadzić ogromne ilości informacji o systemie Windows Server 2003 oraz Windows XP lub Vista. Narzędzie uzyskuje dostęp do podstawowego sprzętu za pomocą Instrumentacji zarządzania Windows (WMI). Nie dla Windows 2000.
Jak zauważył Alexander Stohr w komentarzach :
dir
” nadal będzie działać),dir
” zależy od ustawień regionalnych.źródło
@FOR /F "tokens=2 delims==" %%S IN ('wmic /NODE:"%COMPUTERNAME%" LogicalDisk Where ^(DriveType^="3" and DeviceID^="%some_folder:~0,2%"^) Get FreeSpace /VALUE') DO @SET freespace=%%S
fsutil
, że potrzebowałem uprawnień administratora, aby w ogóle działać, niezależnie od tego, co z nim robisz.Za pomocą tego polecenia możesz znaleźć wszystkie partycje, rozmiar i wolne miejsce:
wmic logicaldisk get size, freespace, caption
źródło
Możesz uniknąć przecinków, używając / -C w poleceniu DIR.
Jeśli chcesz porównać dostępną przestrzeń z potrzebną przestrzenią, możesz zrobić coś podobnego do poniższego. Podałem liczbę za pomocą separatora tysięcy, a następnie je usunąłem. Trudno jest uchwycić liczbę bez przecinków. SET / A jest fajny, ale przestaje działać z dużymi liczbami.
źródło
Poniższy skrypt zapewni Ci wolne bajty na dysku:
Zauważ, że zależy to od wyniku twojego
dir
polecenia, które wymaga ostatniej linii zawierającej wolne miejsce formatu24 Dir(s) 34,071,691,264 bytes free
. Konkretnie:for
pętlę, aby jawnie wykryła linię, zamiast polegać na ustawieniachbytesfree
dla każdej linii).tokens=
bit, aby uzyskać inne słowo).,
znak (lub możesz zmienić podstawienie z przecinka na coś innego).Nie zanieczyszcza przestrzeni nazw środowiska, ustawiając tylko
bytesfree
zmienną przy wyjściu. Jeślidir
wynik jest inny (np. Inne ustawienia regionalne lub językowe), będziesz musiał dostosować skrypt.źródło
df.exe
Pokazuje wszystkie twoje dyski; całkowita, używana i wolna pojemność. Dane wyjściowe można zmienić za pomocą różnych opcji wiersza polecenia.
Możesz go pobrać z http://www.paulsadowski.com/WSH/cmdprogs.htm , http://unxutils.sourceforge.net/ lub gdzie indziej. Jest to standardowe narzędzie uniksowe, takie jak du.
df -h
pokaże całe zajęte i dostępne miejsce na dysku. Na przykład:Cygwin jest dostępny bezpłatnie pod adresem : https://www.cygwin.com/ Dodaje wiele potężnych narzędzi do wiersza poleceń. Aby uzyskać tylko dostępne miejsce na dysku M (odwzorowane w systemie Windows na dysk współdzielony), można wpisać:
źródło
Korzystając z doskonałego rozwiązania paxdiablo , napisałem nieco bardziej wyrafinowany skrypt wsadowy, który używa litery dysku jako przychodzącego argumentu i sprawdza, czy dysk istnieje w trudny (ale nie piękny) sposób:
uwaga1: możesz wpisać prostą literę (np. x) lub możesz użyć formatu x: lub x: \ jako litery dysku w argumencie
note2: skrypt wyświetli stderr z% chkfile% tylko wtedy, gdy rozmiar jest większy niż 0
note3: Zapisałem ten skrypt jako freedisk.cmd (zobacz użycie)
źródło
Robię wariację, aby wygenerować to ze skryptu:
volume C: - 49 GB total space / 29512314880 byte(s) free
Używam diskpart, aby uzyskać te informacje.
@echo off setlocal enableextensions enabledelayedexpansion set chkfile=drivechk.tmp if "%1" == "" goto :usage set drive=%1 set drive=%drive:\=% set drive=%drive::=% dir %drive%:>nul 2>%chkfile% for %%? in (%chkfile%) do ( set chksize=%%~z? ) if %chksize% neq 0 ( more %chkfile% del %chkfile% goto :eof ) del %chkfile% echo list volume | diskpart | find /I " %drive% " >%chkfile% for /f "tokens=6" %%a in ('type %chkfile%' ) do ( set dsksz=%%a ) for /f "tokens=7" %%a in ('type %chkfile%' ) do ( set dskunit=%%a ) del %chkfile% for /f "tokens=3" %%a in ('dir %drive%:\') do ( set bytesfree=%%a ) set bytesfree=%bytesfree:,=% echo volume %drive%: - %dsksz% %dskunit% total space / %bytesfree% byte(s) free endlocal goto :eof :usage echo. echo usage: freedisk ^<driveletter^> (eg.: freedisk c)
źródło
Czy cscript to aplikacja innej firmy? Proponuję wypróbować Microsoft Scripting , w którym możesz użyć języka programowania (JScript, VBS), aby sprawdzić takie rzeczy, jak lista dostępnych miejsc na dysku .
Infrastruktura skryptowa jest obecna we wszystkich aktualnych wersjach systemu Windows (w tym 2008).
źródło
cscript
to Microsoft Scripting. Jest to konsolowa wersja interpretera skryptów systemu Windows (wscript
jest to wersja GUI).