none
cmd skript pro zjištění volného místa na disku

    Dotaz

  • ahoj,

    řeším problém se skriptem pro zjišťování volného místa na disku. mám prakticky kompletně hotové řešení, problém je jen v přepočtu na MB, které naráží asi na limity procesoru CMD.

    Echo Volné místo na disku C:
    dir C:\ /-C > Tmp.txt
    for /F "tokens=5* delims= " %%a in (Tmp.txt) do set Free=%%a
    echo  %Free% bite
    set /a Free=%Free%/100000
    echo  %Free% Megabite.
    

    omezení se projevuje tímto hlášením: Neplatné číslo. Čísla jsou omezena na 32bitovou přesnost.

    nevíte někdo co s tím? už jsem tam daleko že jsem našel řešení nezávislé na jazykové verzi OS tak bych to rád dotáhl do konce.

    díky za pomoc.


    michal zobec http://www.michalzobec.cz | http://www.virtualnipc.cz
    13. června 2011 18:44

Odpovědi

  • Ahoj,

    jde to udělat třeba takto...samozřejmě jednotky jsou takové podivné...možná bych to dělil 1024^2 ale tak záleží, jak to potřebuješ.

     

    Echo Volné místo na disku C:

    dir C:\ /-C > Tmp.txt

    for /F "tokens=5* delims= " %%a in (Tmp.txt) do set diskspace=%%a

    echo wsh.echo cdbl(%diskspace%)/1000000 > %temp%.\tmp.vbs

    for /f %%a in ('cscript //nologo %temp%.\tmp.vbs') do set diskspace=%%a

    del %temp%.\tmp.vbs

    echo  %Diskspace% Megabite.

     



    13. června 2011 19:19
  • v CMD : wmic /namespace:\\root\cimv2 path Win32_PerfFormattedData_PerfDisk_LogicalDisk where name="c:" get FreeMegabytes

     


    Jan Čekala
    • Navržen jako odpověď Hans_c 14. července 2011 6:22
    • Označen jako odpověď Michal Zobec 14. července 2011 6:31
    19. června 2011 10:51
  • Rychle cviceni s for:
    for /f "usebackq" %i in (`wmic /namespace:\\root\cimv2 path Win32_PerfFormattedData_PerfDisk_LogicalDisk where name^="c:" get FreeMegabytes^|findstr /r "[0123456789]"`) do set FreeBytes=%i

    MP

    P.S. nezapomen zdvojit % pokud umistis do cmd scriptu

    2. července 2011 19:15
    Moderátor

Všechny reakce

  • Ahoj,

    jde to udělat třeba takto...samozřejmě jednotky jsou takové podivné...možná bych to dělil 1024^2 ale tak záleží, jak to potřebuješ.

     

    Echo Volné místo na disku C:

    dir C:\ /-C > Tmp.txt

    for /F "tokens=5* delims= " %%a in (Tmp.txt) do set diskspace=%%a

    echo wsh.echo cdbl(%diskspace%)/1000000 > %temp%.\tmp.vbs

    for /f %%a in ('cscript //nologo %temp%.\tmp.vbs') do set diskspace=%%a

    del %temp%.\tmp.vbs

    echo  %Diskspace% Megabite.

     



    13. června 2011 19:19
  • Mozna by bylo lepsi to napsat v Powershellu pres objekty WMI.
    13. června 2011 19:21
    Moderátor
  • WMI objekt dá tu velikost také v bytes. Dělení tam má stejná omezení. Takže by stejně byla nutnost si naprogramovat něco v PowerShellu, což by bylo rozhodně časově náročnější, navíc k tomu musíme připočíst nutnost zabývat se podepisováním ps1 souborů a už je to práce nad hlavu.
    13. června 2011 19:27
  • ahoj Jirko,

    díky moc. sice to vypadá divoce a mám trochu strach z lépe zabezpečenějších systémů ale asi to je to nejjednoduší řešení co budu mít k dispozici :)

    p.s.: vyzkouším a dám sem vědět.


    michal zobec http://www.michalzobec.cz | http://www.virtualnipc.cz
    13. června 2011 19:34
  • omlouvám se ale pokud úmyslně píšu v názvu diskuze CMD tak mi asi jde o CMD řešení. i když připouštím že jsem v tomto ohledu asi náročný a Jirkovo řešení naznačuje že jinudy cesta asi nepovede.
    michal zobec http://www.michalzobec.cz | http://www.virtualnipc.cz
    13. června 2011 19:37
  • WMI se da ovladat pres WMIC ;-)

    MP

    13. června 2011 19:59
    Moderátor
  • no WMI bych bral ale tam je problém s logickými jednotkami ne? on se tam chová jako diskpart a nejsem si pak jist jak vyparsovat ten správný údaj. a navíc bude zase v bitech takže opět budu mít problém s přepočtem ne?
    michal zobec http://www.michalzobec.cz | http://www.virtualnipc.cz
    13. června 2011 20:03
  • já už jinak třeba pro spolehlivější detekci systému používám jen wmi. problém je jen v tom že vyžaduje pro svůj běh práva správce ve windows xp/2003 nebo přidělení zvláštních práv (visty a sedmičky už to nepožadují).
    michal zobec http://www.michalzobec.cz | http://www.virtualnipc.cz
    13. června 2011 20:05
  • Ahoj,

     

    pochopil som to tak, ze hladas CMD riesenie kvoli univerzalnosti, resp. nezavislosti na roznych dodatocnych komponentoch v systeme. Ak je to tak, bol by problem pouzit WBS / WSH ? Visual Basic Script je tu snad od Windows 2000, a v spolupraci so spominanym WMI by to mohlo pracovat ...

     

    http://gallery.technet.microsoft.com/scriptcenter/7fa38863-ad6f-4f46-ac91-9b7d4a30f52b

    http://gallery.technet.microsoft.com/scriptcenter/cfaff0b3-1890-4340-b676-abcc4b22b5ad

     

    Boris

    14. června 2011 7:08
  • ahoj Borisi,

    díky moc, přesně tak zní zadání :) něco podobného už navrhl nahoře Jirka takže chvilku vydržte nějaké řešení otestuju a dám vědět.


    michal zobec http://www.michalzobec.cz | http://www.virtualnipc.cz
    14. června 2011 10:32
  • Tak se tu od puvodniho zameru mit cisty cmd meni reseni na vbs :-)

    K PS bych podotknut, ze to lze delat i pres get-psdrive a z vystupu si muzete vypreparovat free space v GB - a to vse bez vyssich prav. Po "oskubani" to vypada takto a vysledek je primo v GB.

    Name           Used (GB)     Free (GB)      Provider      Root  

    ----              ---------        ---------        --------        ----                                                                                                                     

    C                  65,01         34,99           FileSystem     C:\       

    D                410,14         85,93           FileSystem     D:\                                                                                                                   

     

     

    14. června 2011 12:39
    Moderátor
  • Miloši, děkuji ale u PS je už třeba povolit spouštění nepodepsaných skriptů, což může být nežádoucí. navíc na ws2003 není powershell ani instalován. nechci to příliš komplikovat. ale díky za tvoje rady.
    michal zobec http://www.michalzobec.cz | http://www.virtualnipc.cz
    14. června 2011 13:19
  • wmic /namespace:\\root\cimv2 path Win32_PerfFormattedData_PerfDisk_LogicalDisk get name, FreeMegabytes, percentfreespace /format:htable > C:\volne_misto.htm

     

     

    15. června 2011 9:14
  • tak jsem nad tím přemýšlel a přece jen bych využil řešení přes WMIC. bohužel nejsem schopen vyparsovat správně informaci. může mi někdo v tomto pomoci?

    výhodou tohoto řešení je že není třeba dělat nějaká přesměrování a exporty souborů

    vycházel bych z tohoto skriptu na počátku

    Echo Volné místo na disku C:
    dir C:\ /-C > Tmp.txt
    for /F "tokens=5* delims= " %%a in (Tmp.txt) do set Free=%%a
    echo %Free% bite
    set /a Free=%Free%/100000
    echo %Free% Megabite.
    

    michal zobec http://www.michalzobec.cz | http://www.virtualnipc.cz
    19. června 2011 9:29
  • ahoj Jirko, díky, je to cesta. ale tudy se vydat nechci pokud to půjde :)
    michal zobec http://www.michalzobec.cz | http://www.virtualnipc.cz
    19. června 2011 9:30
  • v CMD : wmic /namespace:\\root\cimv2 path Win32_PerfFormattedData_PerfDisk_LogicalDisk where name="c:" get FreeMegabytes

     


    Jan Čekala
    • Navržen jako odpověď Hans_c 14. července 2011 6:22
    • Označen jako odpověď Michal Zobec 14. července 2011 6:31
    19. června 2011 10:51
  • díky moc, mám ale ještě jednu prosbičku, nejsem schopen vyparsovat ten výsledek (volné místo) do proměnné abych s ním mohl dál pracovat. neměl bys prosím tě pro mne v tomto ohledu řešení?

    díky moc.


    michal zobec www.michalzobec.cz | www.virtualnipc.cz
    2. července 2011 16:32
  • Rychle cviceni s for:
    for /f "usebackq" %i in (`wmic /namespace:\\root\cimv2 path Win32_PerfFormattedData_PerfDisk_LogicalDisk where name^="c:" get FreeMegabytes^|findstr /r "[0123456789]"`) do set FreeBytes=%i

    MP

    P.S. nezapomen zdvojit % pokud umistis do cmd scriptu

    2. července 2011 19:15
    Moderátor
  • díky moc Mirku, to je ono :) ověřil jsem a funguje.
    michal zobec www.michalzobec.cz | www.virtualnipc.cz
    2. července 2011 19:26
  • Neboj, i ja jsem to overil nez jsem postnul, jinak bych si nedovolil drze oznacit jako odpoved :)

    Skoda ze wmic vraci nesmyslny radek navic, v rychlosti me napadlo pouze reseni s findstr

    MP

    2. července 2011 21:06
    Moderátor
  • ne to já psal proto kdyby se pak někdo ptal jestli mi to funguje :)
    michal zobec www.michalzobec.cz | www.virtualnipc.cz
    2. července 2011 21:36