|
|
|
|
Strumenti |
10-01-2022, 16:56 | #1 |
Senior Member
Iscritto dal: Dec 2006
Città: Verona
Messaggi: 901
|
[batch][altro] controllo dimensione più cartelle
Avrei bisogno di tenere sott'occhio la dimensione di alcune cartelle e magari ricevere un avviso visivo se tali cartelle superano un tot di gigabyte occupati o che si avvicina al massimo possibile, solo visuale
Esempio, una cartella dovrà contenere massimo 10GB, eseguendo lo script\programma\quel_che_è se l'occupazione arriva vicino a 10 o superiore deve comparire una avviso Purtroppo non ne capisco nulla di programmazione nè di script avanzati, se non un po' di batch DOS, infatti allego ciò che ho partorito documentandomi in rete: Codice:
:: :: Visualizza la dimensione e la quantita' di file :: di 3 cartelle, rimane aperta la finestra con i risultati :: @ECHO off SETLOCAL ENABLEDELAYEDEXPANSION :: tipi di file da cercare con dir SET target=*.m* *.w* :: percorsi in cui cercare, da modificare alla bisogna SET pA=D:\00NEWxprove SET pB=D:\0Ap SET pC=D:\gtx :: se esiste cancella d2.txt, file di output IF EXIST %TEMP%\d2.txt DEL /Q %TEMP%\d2.txt :: parametri comando DIR, togliere /-C per visualizzare separatori migliaia SET oP= /S/-C :: richiama la procedura per ogni percorso :: ed accoda il risultato a d2.txt CALL :ACCODA %pA% CALL :ACCODA %pB% CALL :ACCODA %pC% :: visualizza risultato e cancella d2.txt TYPE %TEMP%\d2.txt ECHO.&ECHO.&ECHO Premi un tasto due volte per uscire PAUSE > nul ECHO.&ECHO.&ECHO Premi ancora un tasto PAUSE > nul DEL /Q %TEMP%\d2.txt ENDLOCAL EXIT /B :ACCODA :: cambia cartella attiva CD /D "%~1" :: crea d.txt come output comando dir FOR /F "tokens=*" %%A in ('DIR %oP% %target%') DO ECHO %%A >> %TEMP%\d.txt :: cancella l'ultimo rigo di d.txt SET FN=%TEMP%\d.txt FOR /f "tokens=* delims= " %%c in (!FN!) DO ( SET str=%%c ) FIND /v "!str!" < !FN! > %TEMP%\d1.txt :: mette in d2.txt ultimo rigo di d1.txt :: con file e dimensioni SET FN=%TEMP%\d1.txt FOR /f "tokens=* delims= " %%c in (!FN!) DO ( SET str=%%c ) :: accoda a d2.txt i risultati ECHO %str% >> %TEMP%\d2.txt ECHO %~1 >> %TEMP%\d2.txt :: cancella file di appoggio DEL /Q %TEMP%\d.txt %TEMP%\d1.txt EXIT /B Ma mi sono scontrato con l'impossibilità di eseguire calcoli con cifre troppo grandi, ed inoltre non saprei come far visualizzare eventuali avvisi Ho provato a cercare programmini adattabili allo scopo ma non ne ho trovati, se non i classici FolderSize e simili Qualche anima pia che mi da qualche consiglio o aiuto? Grazie
__________________
Desktop: CPU: Ryzen 7 3700X 3.6 GHz_MB: MSI MPG B550 GAMING PLUS_RAM: G.Skill F4-3200C16D DDR4 (2x8GB)_GPU: AMD Radeon RX 6750 XT_HD: Sabrent 1TB Rocket Nvme PCIe 4.0 M.2 2280 + Crucial MX500 1TB_OS: Win 10 pro 64bit ______Monitor: AOC Q27T1 2560x1440 75Hz 5ms_Case: PHANTEKS Eclypse P600S_Ali: CORSAIR RM 650x_ Notebook: MSI U270 + SSD 840Pro 256GB_OS: Win 7HP64bit |
10-01-2022, 17:06 | #2 |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3594
|
nel set di comandi windows, c'è il comodo diruse.exe senza dover scomodare script
https://ss64.com/nt/diruse.html |
10-01-2022, 17:12 | #3 |
Senior Member
Iscritto dal: Dec 2006
Città: Verona
Messaggi: 901
|
Non esiste in Win10, da dove la prendo?
Trovato un equivalente della Sysinternals, DU Ma è lo stesso, come faccio a fare apparire avvisi e fare calcoli?
__________________
Desktop: CPU: Ryzen 7 3700X 3.6 GHz_MB: MSI MPG B550 GAMING PLUS_RAM: G.Skill F4-3200C16D DDR4 (2x8GB)_GPU: AMD Radeon RX 6750 XT_HD: Sabrent 1TB Rocket Nvme PCIe 4.0 M.2 2280 + Crucial MX500 1TB_OS: Win 10 pro 64bit ______Monitor: AOC Q27T1 2560x1440 75Hz 5ms_Case: PHANTEKS Eclypse P600S_Ali: CORSAIR RM 650x_ Notebook: MSI U270 + SSD 840Pro 256GB_OS: Win 7HP64bit Ultima modifica di bobo779256 : 10-01-2022 alle 17:21. |
10-01-2022, 17:37 | #4 |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3594
|
diruse.exe fa parte di un gruppo di utility di Microsoft. Se cerchi in rete lo trovi.
forse questo è equivalente https://docs.microsoft.com/en-us/sys...s/downloads/du |
10-01-2022, 17:51 | #5 |
Senior Member
Iscritto dal: Dec 2006
Città: Verona
Messaggi: 901
|
Si, grazie misterx, avevo trovato proprio DU
Ma c'è un problema... mi da valori errati rispetto a Esplora file di Windows, chissa perchè...
__________________
Desktop: CPU: Ryzen 7 3700X 3.6 GHz_MB: MSI MPG B550 GAMING PLUS_RAM: G.Skill F4-3200C16D DDR4 (2x8GB)_GPU: AMD Radeon RX 6750 XT_HD: Sabrent 1TB Rocket Nvme PCIe 4.0 M.2 2280 + Crucial MX500 1TB_OS: Win 10 pro 64bit ______Monitor: AOC Q27T1 2560x1440 75Hz 5ms_Case: PHANTEKS Eclypse P600S_Ali: CORSAIR RM 650x_ Notebook: MSI U270 + SSD 840Pro 256GB_OS: Win 7HP64bit |
10-01-2022, 18:24 | #6 |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3594
|
guarda se entrano in goco file di sistema e quindi nascosti
|
10-01-2022, 21:07 | #7 |
Senior Member
Iscritto dal: Dec 2006
Città: Verona
Messaggi: 901
|
No, niente file sistema\nascosti
Quindi... boh!
__________________
Desktop: CPU: Ryzen 7 3700X 3.6 GHz_MB: MSI MPG B550 GAMING PLUS_RAM: G.Skill F4-3200C16D DDR4 (2x8GB)_GPU: AMD Radeon RX 6750 XT_HD: Sabrent 1TB Rocket Nvme PCIe 4.0 M.2 2280 + Crucial MX500 1TB_OS: Win 10 pro 64bit ______Monitor: AOC Q27T1 2560x1440 75Hz 5ms_Case: PHANTEKS Eclypse P600S_Ali: CORSAIR RM 650x_ Notebook: MSI U270 + SSD 840Pro 256GB_OS: Win 7HP64bit |
11-01-2022, 07:09 | #8 |
Senior Member
Iscritto dal: May 2005
Messaggi: 8685
|
Cerca di passare a qualcosa di più avanzato, come VBS o PowerShell.
La sintassi è semplice, ma ti apre un nuovo mondo di possibilità (per quanto sia fattibile con i batch, ma come vedi meno codice, più leggibile) VBS Codice:
Dim objFSO, myFolders, Folder, objFolder, sizeFolder Set objFSO = CreateObject("Scripting.FileSystemObject") myFolders = Array("C:\Cartella_1","C:\Cartella_2", "C:\Cartella_3") For Each Folder In myFolders If objFSO.FolderExists(Folder) Then Set objFolder = objFSO.GetFolder(Folder) sizeFolder = Round(objFolder.Size / 1024 / 1024, 2) WScript.Echo(Folder & Chr(13) & Chr(10) & (sizeFolder) & " MB") If sizeFolder >= 1000 Then WScript.Echo("Dimensione superata per la cartella:" & Chr(13) & Chr(10) & Folder & Chr(13) & Chr(10) & (sizeFolder) & " MB") End If End If Next
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . Ultima modifica di x_Master_x : 11-01-2022 alle 07:12. |
11-01-2022, 12:30 | #9 |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3594
|
|
11-01-2022, 18:09 | #10 |
Senior Member
Iscritto dal: Dec 2006
Città: Verona
Messaggi: 901
|
@ x_Master_x
è che sono completamente digiuno, non saprei nemmeno da dove cominciare Consigli su questo? Qualche link da cui iniziare a studiare? VBS o PowerShell non fa differenza per me, visto che non li conosco entrambi, ma VBS lo vedo più 'logico' @misterx ok, ho visto che dalla casa madre andrebbe scaricato tutto un pacchetto, e per avere solo quella funzione non mi pare il caso, continuo a cercare... Comunque in sostituzione dello script che ho scritto ho provato un programmino che fa le stesse cose, visualizza dimensioni cartelle in modo compatto, TreeSizeFree-Portable, per ora mi arrangio con quello Ma anche lo script VBS messo da x_Master_x sarebbe ottimo, lo devo solo adattare allo scopo (ad esempio dovrebbe visualizzare in contemporanea nella stessa finestrella dimensioni cartelle e se supera o meno un valore stabilito per ognuna di esse) Grazie ad entrambi [edit] ho scoperto il perchè della differenza in byte tra DU e Esplora file, ed è più preciso DU (DU segna più di Esplora file) Esplora file non conteggia alcune funzioni nascoste dei file NTFS, in questo caso la 'Zone.Identifier' memorizzata come Alternate Data Stream nel file, sarebbe la voce che compare facendo destro sul file\proprietà e a volte compare sotto 'Sicurezza: il file proviene da un altro computer ecc...' e la spunta 'Annulla blocco', se annullo il blocco per tutti i file presenti nella cartella allora i valori coincidono al byte [/edit]
__________________
Desktop: CPU: Ryzen 7 3700X 3.6 GHz_MB: MSI MPG B550 GAMING PLUS_RAM: G.Skill F4-3200C16D DDR4 (2x8GB)_GPU: AMD Radeon RX 6750 XT_HD: Sabrent 1TB Rocket Nvme PCIe 4.0 M.2 2280 + Crucial MX500 1TB_OS: Win 10 pro 64bit ______Monitor: AOC Q27T1 2560x1440 75Hz 5ms_Case: PHANTEKS Eclypse P600S_Ali: CORSAIR RM 650x_ Notebook: MSI U270 + SSD 840Pro 256GB_OS: Win 7HP64bit Ultima modifica di bobo779256 : 11-01-2022 alle 19:12. |
11-01-2022, 19:27 | #11 |
Senior Member
Iscritto dal: May 2005
Messaggi: 8685
|
Qualsiasi risorsa online va bene per i VBS, se usi i batch alla fine ti basta giusto imparare la sintassi di base, if, cicli ecc
Comunque non ho capito il risultato che vorresti. Una finestra (?) che aggiorna i valori in dimensioni di queste cartelle in "tempo reale" (quantificare il tempo reale? Ogni quanto?) te li mostra a schermo sempre e ti avvisa quando supera? Se lo scopo è sapere quando una di queste cartelle supera il valore x, basta quello che ho fatto. Togli il primo WScript.Echo, lascia il secondo. Quindi a quel punto ti appare la finestra quando solo una delle directory supera il valore x. Con pianifica attività, imposti un task che lancia lo script ogni 5 minuti a ciclo infinito. Se appare la finestra, sai perché e chi.
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
11-01-2022, 19:44 | #12 |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3594
|
senza voler scomodare programmi esterni ed usando le risorse del sistema operativo, ti ho messo insieme questo mio vecchio script che mi sono stancato di testare (non mi occupo più di sistemistica) e lo lascio a te come compito, così puoi dire di aver partecipato. Buon lavoro e buon divertimento.
Codice:
@echo off SETLOCAL ENABLEDELAYEDEXPANSION del ListaFile.txt del OutPut.txt dir C:\miadir /s /b /a:-d >>ListaFile.txt set /a t=0 set /a g=1048576 FOR /F "tokens=* delims=" %%a IN (ListaFile.txt) DO ( set k=%%~za set /a t+=k/g echo %%a [%%~za]>>OutPut.txt ) echo ------------>>OutPut.txt echo Totale: %t% >>OutPut.txt echo ------------>>OutPut.txt set /a g=1048576 converti i byte che ti vengono restituiti in MB dato che il valore ritornato dal batch è in byte, insomma, lavoraci un po su. Ultima modifica di misterx : 11-01-2022 alle 19:50. |
11-01-2022, 19:45 | #13 |
Senior Member
Iscritto dal: Jul 2008
Messaggi: 7880
|
Gestione delle quote
https://docs.microsoft.com/it-it/win...ota-management Creare quote per limitare lo spazio consentito per un volume o una cartella e generare notifiche quando si avvicinano o superano i limiti di quota.
__________________
System Failure |
12-01-2022, 09:43 | #14 |
Senior Member
Iscritto dal: Dec 2006
Città: Verona
Messaggi: 901
|
@ Perseverance
Non ho mai usato la gestione quote per cartelle ma dal link che hai messo sembra sia possibile nelle varie versioni Server di Win, con la mia 10 Pro credo posso gestire solo quote disco, non cartelle. Sbaglio? @ misterx Grazie, vedo e provo @ x_Master_x Si, lo scopo attuale è solo sapere se una di queste cartelle supera un tot, dentro sono memorizzati principalmente file audio HD di qualche centinaio di megabyte a brano, ed ogni cartella corrisponde ad una chiavetta USB\lettore audio\smartphone, e questo al momento per due persone (quindi tutto doppio). Avere quindi sott'occhio spazio usato e disponibile per una periferica esterna sarebbe molto utile Esempio: PINO-carelle 2-per lettore audio max 32GB e smartphone max 64GB, BOBO-cartelle 4-per lettore audio max 256GB, smartphone max 128GB, chiavetta1 USB max 64GB, chiavetta2 USB max 128GB Provo col tuo VBS
__________________
Desktop: CPU: Ryzen 7 3700X 3.6 GHz_MB: MSI MPG B550 GAMING PLUS_RAM: G.Skill F4-3200C16D DDR4 (2x8GB)_GPU: AMD Radeon RX 6750 XT_HD: Sabrent 1TB Rocket Nvme PCIe 4.0 M.2 2280 + Crucial MX500 1TB_OS: Win 10 pro 64bit ______Monitor: AOC Q27T1 2560x1440 75Hz 5ms_Case: PHANTEKS Eclypse P600S_Ali: CORSAIR RM 650x_ Notebook: MSI U270 + SSD 840Pro 256GB_OS: Win 7HP64bit |
13-01-2022, 16:57 | #15 |
Senior Member
Iscritto dal: Dec 2006
Città: Verona
Messaggi: 901
|
Studiato ed adattato un po' il VBS messo da x_Master_x
Esce fuori questo codice qua: Codice:
Dim objFSO, myFolders, Folder, objFolder, sizeFolder, testo, myDim Set objFSO = CreateObject("Scripting.FileSystemObject") myFolders = Array("D:\00NEWxprove","D:\0Ap", "D:\gtx") myDim = Array(1000000000,350000,1000000) miaVar=0 testo="" For Each Folder In myFolders If objFSO.FolderExists(Folder) Then Set objFolder = objFSO.GetFolder(Folder) sizeFolder = Round(objFolder.Size, 2) testo = testo & Folder & Chr(10) & (sizeFolder) & " Byte su "& myDim(miaVar) & Chr(10) If sizeFolder >= myDim(miaVar) then testo = testo & "Dimensione superata" & Chr(13) & Chr(13) Else testo = testo & Chr(13) & Chr(13) End If End If miaVar=miaVar+1 Next msgbox (testo) che è quello che volevo ottenere, far partire lo script alla bisogna e visualizzare quei valori e se superano il limite Ora studierò ancora per magari rendere più visibili le scritte, come ad esempio aggiungere i separatori delle migliaia ai numeri e qualche colore di sfondo se 'superata', ma già così va bene Anche il bat proposto da misterx funziona, accantono anche quello magari per usi futuri [edit] Trovato anche questo, compare la X rossa e con FormatNumber formatta i numeri, più visibili Passo e chiudo [\edit]
__________________
Desktop: CPU: Ryzen 7 3700X 3.6 GHz_MB: MSI MPG B550 GAMING PLUS_RAM: G.Skill F4-3200C16D DDR4 (2x8GB)_GPU: AMD Radeon RX 6750 XT_HD: Sabrent 1TB Rocket Nvme PCIe 4.0 M.2 2280 + Crucial MX500 1TB_OS: Win 10 pro 64bit ______Monitor: AOC Q27T1 2560x1440 75Hz 5ms_Case: PHANTEKS Eclypse P600S_Ali: CORSAIR RM 650x_ Notebook: MSI U270 + SSD 840Pro 256GB_OS: Win 7HP64bit Ultima modifica di bobo779256 : 13-01-2022 alle 17:38. |
15-01-2022, 10:34 | #16 |
Senior Member
Iscritto dal: May 2005
Messaggi: 8685
|
Visto che alla fine non è poi così complesso? Hai fatto un array che si incrementa ad ogni ciclo, aggiunto parametri all'MsgBox e formattato i caratteri. È comunque un altro mondo rispetto ai batch.
P.S. Non hai dichiarato miaVar
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
15-01-2022, 23:09 | #17 |
Senior Member
Iscritto dal: Dec 2006
Città: Verona
Messaggi: 901
|
Si, modificare ciò che già c'è posso farlo, se dovessi progettare uno script da zero... non saprei come fare al momento
Vero che è tutta un'altra cosa, bisogna solo provare, provare, pro... Per il P.S. è vero, ma non avevo nemmeno messo il codice finale... che metto 'mo, potrebbe essere di ispirazione ad altri Codice:
Dim objFSO, myFolders, Folder, objFolder, sizeFolder, testo, myDim, miaVar, pul Set objFSO = CreateObject("Scripting.FileSystemObject") myFolders = Array("D:\00NEWxprove","D:\0Ap", "D:\gtx") myDim = Array(1000000000,350000,1000000) miaVar = 0 : pul = 0 : testo = "" For Each Folder In myFolders If objFSO.FolderExists(Folder) Then Set objFolder = objFSO.GetFolder(Folder) sizeFolder = Round(objFolder.Size, 2) testo = testo & Folder & Chr(10) & (FormatNumber(sizeFolder,0)) & " Byte su " & FormatNumber(myDim(miaVar),0) & Chr(10) If sizeFolder >= myDim(miaVar) then testo = testo & "Dimensione superata" & Chr(13) & Chr(13) pul = 1 Else testo = testo & Chr(13) & Chr(13) End If End If miaVar=miaVar+1 Next msgbox testo, 16*pul, ""
__________________
Desktop: CPU: Ryzen 7 3700X 3.6 GHz_MB: MSI MPG B550 GAMING PLUS_RAM: G.Skill F4-3200C16D DDR4 (2x8GB)_GPU: AMD Radeon RX 6750 XT_HD: Sabrent 1TB Rocket Nvme PCIe 4.0 M.2 2280 + Crucial MX500 1TB_OS: Win 10 pro 64bit ______Monitor: AOC Q27T1 2560x1440 75Hz 5ms_Case: PHANTEKS Eclypse P600S_Ali: CORSAIR RM 650x_ Notebook: MSI U270 + SSD 840Pro 256GB_OS: Win 7HP64bit Ultima modifica di bobo779256 : 16-01-2022 alle 18:37. |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:31.