Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Zjištění volného místa na disku

Primitivní až triviální záležitost! :-D
Už půl hodiny hledám způsob jak vytáhnout údaj o volném/obsazeném místě na disku (nebo jen volném, když budu skromný).
Chtěl bych dávkou poslat tento údaj do logu, ale ne výpis z DIR, to je moc obsáhlé. Stačí jen 1 až 2 řádky. V DOSu snad kdysi takhle fungovalo FREE?:-/
Díky

Předmět Autor Datum
tak google řiká něco takového: :kBytesFree drive ret -- returns the free space of a drive in kiloby…
AZOR 23.01.2007 15:50
AZOR
Tip.aspx
anarchist 23.01.2007 15:50
anarchist
Jéžišmarja, to jsem si ale vymyslel ptákovinu! Tolik sprostých písmenek jsem pohromadě už dlouho nev…
Jack 23.01.2007 16:05
Jack
On je taky rozdíl, pro jakou verzi DOSu to chceš. A může být i VBS?
host 23.01.2007 16:10
host
Účel: Mám vytvořenu dávku, která je pravidelně volána přes Naplánované úlohy ve Win2000Srv. Stáhne d…
Jack 23.01.2007 16:32
Jack
ja dosu nerozumim, ale oba jsem poslali stejnej přístup: "c:lomítko dir" a na konci to najde string…
AZOR 23.01.2007 16:16
AZOR
Díky za důvěru, ještě se tím zkusím se svými chabými znalostmi prokousat. Edit: tak jsem to celé ok…
Jack 23.01.2007 16:35
Jack
V podstate to mas dobre, az na drobnou nekompatibilitu cz fontu ve zpracovavanych retezcich. Zalezi…
JK 23.01.2007 20:09
JK
Díky za vyčerpávající odpověď. Zítra se na to ještě podívám a doplním ten hrubý převod na MB. Člověk… poslední
Jack 23.01.2007 21:31
Jack

tak google řiká něco takového:

:kBytesFree drive ret -- returns the free space of a drive in kilobytes
::                    -- drive  [in]      - drive letter, default is c:
::                    -- ret    [out,opt] - varref returns number of bytes free
:$source www.DosTips.com
SETLOCAL
SET drive=%~1
IF "%drive%"=="" SET drive=C:
FOR /f "tokens=3 delims= " %%a in ('"dir %drive%\|find "bytes free""') do set free=%%a
SET free=%free:,=%&         rem eleminate commas in number
SET free=%free:.=%&         rem eleminate commas in number
SET free=%free:~0,-3%&      rem divide by 1000 by cutting off the last 3 digits
( ENDLOCAL & REM RETURN VALUES
    IF "%~2" NEQ "" (SET %~2=%free%) ELSE echo.%free%
)
EXIT /b %ERRORLEVEL%

mě to ošem nefunguje...(asi tam bude chtít změnin to bytes free za volných bajtů a jiné upravy)

Jéžišmarja, to jsem si ale vymyslel ptákovinu! Tolik sprostých písmenek jsem pohromadě už dlouho neviděl. Tohle asi nepořeším. V hluboké deprézi zřejmě vzdávám. Pokud by vás napadlo něco "more user friendly" dejte vědět. Díky

Účel:
Mám vytvořenu dávku, která je pravidelně volána přes Naplánované úlohy ve Win2000Srv. Stáhne data z určených adresářů do jednoho (xcopy) a ten zazálohuje na USB disk. Přitom vypisuje log odkud, kam, co.
Závěrem mi pošle na jinou stanici zprávu o záloze. No a já bych chtěl vědět kolik místa na USB disku zbývá (v logu). S VBS moc kamarád nejsem, školení mě teprve čeká :-D.

Díky za důvěru, ještě se tím zkusím se svými chabými znalostmi prokousat.

Edit: tak jsem to celé okleštil a vypadlo mi toto funkční torzo

@echo off

FOR /f "tokens=5 " %%a in ('"dir H:\|find "Volněch bajt…: ""') do @set free=%%a 

echo Na jednotce zbyva %free%volnych bajtu

Chtěl jsem ještě doplnit přepočet na "vyšší" jednotky ale vzdávám to. Ona totiž hodnota volné paměti vyleze ve formátu např. 32 854 286 a já si nevím rady jak z tohoto řetězce vysekat mezery aby byl považován za číslo. Pak by se dal elegantně přepočítat.

set /a freemega=%free% / 1048576

Zkoušel jsem to jako ve výše uvedeném případě použitím

SET free=%free:,=%&         rem eleminate commas in number

ale správná syntaxe je pro mě tvrdým oříškem.
Zatím mi to takhle stačí, pánové díky.
:beer:

V podstate to mas dobre, az na drobnou nekompatibilitu cz fontu ve zpracovavanych retezcich.
Zalezi na tom jakou presnost zjisteni volneho mista pozadujes, s orientacni presnosti to v Winxp cz funguje takto:
(nejlepe to zkopiruj a vloz do bat souboru, snad to ty fonty nic nezkonvertuje)

set drive=D:
FOR /f "tokens=5 delims= " %%a in ('"dir %drive%\|find "Volněch bajt""') do set free=%%a

rem 
SET free=%free:˙=%&

rem Prevod na MB lze orientacne udelat odseknutim poslednich 6 cislic
SET freemega=%free:~0,-6%& 
echo Na jednotce %drive% zbyva %freemega% MB volneho mista

rem Priklad deleni (je omezeno 32 bitovou presnosti tj 4.29 GB, takze to nelze u vetsich disku pouzit)
set /A freemega1=%free%/1048576
echo %freemega1%

Díky za vyčerpávající odpověď. Zítra se na to ještě podívám a doplním ten hrubý převod na MB. Člověk se v těch číslech nějak ztrácí.
Považuji za vyřešené a všem zůčastněným dík a obdiv :beer::-D

Edit: Ano, to je přesně ono. Jen jeden dotaz: co je to za znak po dvojtečce v

SET free=%free:˙=%&

Zpět do poradny Odpovědět na původní otázku Nahoru