Visualizzazione dei risultati da 1 a 10 su 10

Hybrid View

  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
    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.

  7. #7
    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?

  8. #8
    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.

  9. #9
    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".

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 © 2025 vBulletin Solutions, Inc. All rights reserved.