Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    188

    [DOS]Dimensioni cartella

    Ciao.
    Esiste un comando DOS che restituisca da dimensione totale di un albero di directory?
    Ho anche fatto vari tentativi con un ciclo FOR, ma non riesco a sommare i valori
    codice:
    SET /a dim=0
    FOR /r C:\Users\Nomeutente %%A IN (*) DO (
    SET /a dim=%dim%+%%~zA
    )
    ECHO %dim%
    PAUSE

    Grazie.

  2. #2
    Esistono alcuni modi contorti e parzialmente funzionanti di ottenere ciò che desideri sotto DOS "puro", ma li sconsiglio. Meglio pensare ad una estensione della shell, come Windows PowerShell o TakeCommand/TCC, oppure ricorrere ad una utility come DU del noto Russinovich (Sysinternals).
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    188
    Anche io avevo trovato un (diverso) DU per risolvere il problema
    http://gnuwin32.sourceforge.net/packages/coreutils.htm
    ma mi fa i*******e non riuscire a risolvere in semplice DOS

  4. #4
    Se proprio vuoi toglierti lo sfizio, prova a modificare il tuo batch come segue:

    codice:
    @echo off
    set tsize=0
    for /r %%f in (.\*) do set /a tsize+=%%~zf
    echo Dimensione: %tsize% bytes.
    Personalmente sconsiglio comunque soluzioni così farraginose, in favore di tools specifici o di un semplice cambio di shell. Ovviamente il grosso problema di batch siffatti è il limite dei 32 bit per l'aritmetica intera, quindi dimensioni superiori ai fatidici 2GiB danno adito a letture non valide.

    Il du che hai trovato è un port del classico comando Unix.
    Ultima modifica di M.A.W. 1968; 06-07-2014 a 22:06
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    188
    Mi sembra che l'uso di "FOR /r......%%~zf" restituisca dei risultati sballati.
    Invece funziona con FOR /f:
    codice:
    SETLOCAL EnableDelayedExpansion
    SET /a valore=0
    SET /a somma=0
    FOR /f "usebackq tokens=1,2,3" %%a in (`"DIR C:\Users\NomeUtente /a:-d /s /-c|FINDSTR ../../...."`) DO (
    SET /a valore=%%c
    SET /a somma=!somma!+!valore!
    )
    @ECHO !somma!
    PAUSE



    Quote Originariamente inviata da M.A.W. 1968 Visualizza il messaggio
    Ovviamente il grosso problema di batch siffatti è il limite dei 32 bit per l'aritmetica intera, quindi dimensioni superiori ai fatidici 2GiB danno adito a letture non valide.
    Non lo sapevo ...Questo, purtroppo, rende inutile ogni sforzo .

    Grazie, comunque.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    188
    Infatti, ho provato a "caricare" una directory con più di 2GB di file, e ho ottenuto un risultato negativo.

    Grazie ancora per l'avvertimento: nella mia ignoranza, sarei impazzito per trovare la causa del problema.

    Per l'appunto il batch in questione mi serviva per "misurare" cartelle di grandi dimensioni: proverò ad utilizzare un "DU".

  7. #7
    Quote Originariamente inviata da 23Andrea Visualizza il messaggio
    Mi sembra che l'uso di "FOR /r......%%~zf" restituisca dei risultati sballati.
    Vedi sopra. La ricorsione nel comando FOR funziona perfettamente: gli errori sono dovuti al fatto che la shell usa variabili segnate a 32 bit, da cui il limite di 2GiB. La forma /f attua addirittura un parsing, ed è ancora più farraginosa e complessa... ma non risolve in alcun modo il problema. Per questo non posso che ribadire il consiglio fondamentale: usare un tool CLI apposito, oppure passare ad una shell alternativa che non abbia tali limiti.
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    188
    Come consigliato dall'amico M.A.W. 1968, ho provato due tools:
    http://gnuwin32.sourceforge.net/packages/coreutils.htm (Du.exe è contenuto nel pacchetto coreutils)
    http://technet.microsoft.com/en-us/s...rnals/bb896651

    ma ottengo risultati discordanti.
    Per esempio:

    C:\Users\<nome utente>\Desktop

    Esplora risorse:
    Dimensioni: 115.952.632 byte
    Su disco: 118.894.592 byte

    Du (Sysinternals):
    Size: 115.962.948 bytes
    Size on disk: 119.329.168 bytes

    Du (gnuwin32)
    116460536 (bytes)


    Quale sarà il valore attendibile?

  9. #9
    Quote Originariamente inviata da 23Andrea Visualizza il messaggio
    Quale sarà il valore attendibile?
    Non è banale determinarlo. Un file system come NTFS non rende semplice rispondere a tali domande: oltre ai file nascosti, si possono includere o meno nel conteggio le strutture di directories, si possono conteggiare i puri link simbolici o l'effettiva dimensione del file da essi referenziato, eccetera.

    Questo spiega ampiamente le discrepanze: non è certo difficle contare, ma spesso il problema è stabilire esattamente cosa si vuole contare... in ogni caso, il tool di Sysinternals è sicuramente uno dei migliori in circolazione, e più documentato sui dettagli di NTFS.
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    188
    Quote Originariamente inviata da M.A.W. 1968 Visualizza il messaggio
    ... e più documentato sui dettagli di NTFS.
    Sì, anche io ho pensato che un programma scritto per Linux, pur in una versione compatibile con Windows, sia probabilmente tarato sulle caratteristiche di un filesystem diverso da NTFS.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.