none
Batch per ricerca e cancellazione file RRS feed

  • Dotaz

  • Salve a tutti, mi scuso anticipatamente se non è questo il forum giusto, ma visto che trattasi di uno script che devo implementare su dei server, penso di non aver sbagliato... :-)

    in sostanza la problematica è questa:

    sto creando un batch da pianificare su dei server 2012, 2012 R2 e 2016 per la cancellazione automatica di file mp3, mp4, jpg ed avi, per utenti diciamo un pò disattenti...

    Per forza di cose la ricerca dei file deve partire dalla root e quindi la bozza del batch è la seguente:

    echo off

    set dir=C:\

    del /F /Q /S %dir%*.mp3 > nul

    del /F /Q /S %dir%*.mp4 > nul

    del /F /Q /S %dir%*.jpg > nul

    del /F /Q /S %dir%*.avi > nul

    la mia domanda è: c'è un modo per negare la ricerca dei file suddetti nelle cartelle di sistema e/o dichiarate a parte? ovviamente in tutta windows ed altre della root?

    Ho provato a fare qualcosa con forfiles, con for ed infine ho pensato qualcosa con if, ma non conosco le espressioni che possano aiutarmi nello scopo... :-(

    Ringrazio anticipatamente!! :-)

    pátek 15. listopadu 2019 17:22

Odpovědi

  • Capisco che FSRM non sia utilizzabile nel tuo caso (Umberto vuole cercare ovunque non nelle sole share), però non ho capito dove sia il problema del robocopy, da vista in poi funziona, 7, 8, 8.1, 10 compresi.

    For /?

    dentro i batch se usi il for, dovrai raddoppiare i per cento  %%, in una finestra cmd solo  uno %

    Il seguente batch è molto molto simile alla riga di robocopy! (System Volume Information in più)

    @echo off
    setlocal
    set filetrovati=c:\temp\file_da_cancellare.cmd.txt
    type NUL>"%filetrovati%"
    set "stop_un_po=(timeout 5) 2>NUL 1>NUL"
    rem  set  "stop_un_po="
    set root=c:\
    set "esclusisempre=\\appdata\\ \\onedrive\\"
    set "esclusi=Program\ files programdata windows System\ Volume\ Information" 
    Echo ---- elenco le directory escluse:
    dir /b /ad %root% |findstr /i   "%esclusi%"
    echo ----------------------start---%time%--------------------------------
    %stop_un_po%
    pushd %root% || goto :EOF
    For /f "tokens=*" %%D in ('dir /b /ad %root% ^|findstr /i /v  "%esclusi%"') do (
        pushD %root%%%D 2>NUL 1>NUL || (echo errore nell'accesso a %%D & %stop_un_po%)
    	for /f "tokens=*" %%F in ('dir /s /b /a-d  *.jpg *.mp4 *.avi *.mp3 2^>NUL ^| findstr /i /v "%esclusisempre%"  2^>nul ') do (
       		echo del /q /f "%%F" >>"%filetrovati%"
    	)
    )
    echo ----------------------end---%time%--------------------------------
    "%filetrovati%"
    

    Se ti posso dare un consiglio, usa powershell,

    ha una programmazione più lineare, sei al passo coi tempi,

    tanti libri ti possano accopmpagnare, i batch puri sono ostici..

    Ciao Gas



    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere





    neděle 24. listopadu 2019 22:13
    Moderátor

Všechny reakce

  • Si potrebbe fare uno script in puro batch o in powershell, sarebbe necessario avere una analisi più dettagliata di dove andare a cercare, un'alternativa è usare il comando robocopy, MOLTO rischioso!!!, dove tu andrai a scegliere cosa escludere (pericolo!)

    Robocopy c:\   c:\temp\tolte  *.jpg *.mp4  *.avi  *.mp3 /s /xj /r:0 /w:0 /mov /xd  "c:\windows"  /xd "Program Files (x86)"   /xd  c:\temp\tolte  "c:\program files" c:\programdata  appdata  onedrive  /ndl /log:c:\temp\log.log /L

    il programma: Robocopy.exe

    sorgente da cui far partire la ricerca: c:\  

    destinazione: c:\temp\tolte

    file da indludere nella ricerca : *.jpg *.mp4  *.avi  *.mp3

    cercare nei subfolders e non seguire i junction points  no retry no wait: /s /xj /r:0 /w:0

    Sposta i file e li elimina dall'origine dopo la copia (non scrivere /move sarebbe un macello): /mov

    Sequenza di directories escluse, queste otto sono il sottoinsieme minimo per non fare danni!!:
        c:\temp\tolte  pure la  "c:\windows" 
    Diecrectory esclusa:   "Program Files (x86)"  
    Diecrectory esclusa:  "c:\program files" 
    Diecrectory esclusa:  programdata
    Diecrectory esclusa (qualsiasi appdata incontrata):  appdata 
    Diecrectory esclusa(qualsiasi onedrive incontrato): onedrive 

    non scrive nel log le directories che incontra: /ndl
    file di log: /log:c:\temp\log.log

    Specifica che i file devono essere elencati solo (e non copiati, eliminati) : /L

    Toglierere l'opzione  /L rende il comando operative questo sposterà tutti i files jpg/mp4/avi in c:\temp\tolte dopodichè andranno cancellati (occhio anche a questo comando: rd c:\temp\tolte /q /s ) .

    Fossi in te lo eseguirei solo con il /L (la prima volta ASSOLUTAMENTE) poi guarderei  il file log.log per capire cosa verrà spostato... OCCHIO amcora se userai come sorgente c:\ il folder c:\temp\tolte sarà hidden (non pensare che il comando non abbia funzionato!).

    Le richieste del forum possono essere strane, certe volte, poco sensate, altre volte pericolose ...

    Ciao Gastone




    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere


    sobota 16. listopadu 2019 18:34
    Moderátor
  • Ciao Umberto, fermo restando le indicazioni di Gastone perché non utilizzare l'apposito ruolo?

    Ti giro uno dei tanti link che trovi in rete che ti illustra come implementare e configurare il ruolo FSRM  https://mizitechinfo.wordpress.com/2013/08/20/step-by-step-manage-file-server-using-fsrm-file-screening-in-windows-server-2012-r2/

    Saluti
    Nino


    www.testerlab.it

    pondělí 18. listopadu 2019 5:52
    Moderátor
  • Ciao Gastone,

    prima di tutto voglio ringraziare tutti voi per il prezioso aiuto che date e per l'esistenza stessa del forum!!!

    Purtroppo per esigenze nuove del cliente la soluzione suggerita, sia del robocopy che del FSRM, non possono essere valide perchè il cliente vorrebbe estendere tali "ricerche" anche a client W7, 8 e 10, quindi devo per forza crearli via batch.

    Incaponendomi sulle varie possibilità di utilizzo delle condizioni FOR sono riuscito a formulare un batch che risponde al 99,9% alla mia esigenza e funziona alla grande!! :-)

    L'unica cosa è che iniziando la ricerca dalla root, entra anche nelle cartelle di sistema Windows, Programmi ed altre che io vorrei fargli saltare, per evitare danni al sistema e soprattutto per il grande dispendio di tempo che occorre per arrivare alla fine del processo e proprio non riesco a trovare è il modo di fargliele escludere.

    A seguire il batch creato fin'ora, con esempio di cancellazione dei soli file mp3:

    echo off

    SET dir=c:\

    SET del=erase /F /Q

    call C:\SCRIPT\Batch1.cmd (dove all'interno c'è: FOR /D /R %dir% %%i IN (.) DO (%del% "%%i\*.mp3"))

    SET dir=d:
    call C:\SCRIPT\Batch1.cmd
    ) ELSE (
    GOTO :NEXTDIR
    )

    :NEXTDIR

    IF EXIST e: (..... ripetizione della routine di sopra per l'unità e:....

    Su un sito avevo trovato una cosa che diceva potesse risolvermi il problema modificando ed implementando la parte:

    FOR /D /R %dir% %%i IN (.) DO... con: FOR /F  in ('dir /b .........') DO.....

    ma era spiegato talmente superficialmente che non si capiva nulla!!! :-).

    Spero che queste indicazioni possano esservi utili per aiutarmi :-)

    PERDONATE LA MIA IGNORANZA un'ultima cosa che non so e che non sono riuscito a trovare a nessuna parte:

    Nelle condizioni FOR, nel caso mio se ho capito bene la variabile %i (oppure %%i per gli script) assumerebbe il valore del nome della directory (unito a /D ed a (.)) dove ricercare la condizione vera ed eseguire il relativo comando impartito.

    Ma tutte quelle altre variabili che vedo in giro per siti e nell'help, ad esempio %s, %j, %k, che significato/valore assumono? Mi potete indicare dove posso trovare un manuale, una guida dove ci siano ben specificati tutti questi argomenti?

    Grazie!! :-) 

    neděle 24. listopadu 2019 18:30
  • Capisco che FSRM non sia utilizzabile nel tuo caso (Umberto vuole cercare ovunque non nelle sole share), però non ho capito dove sia il problema del robocopy, da vista in poi funziona, 7, 8, 8.1, 10 compresi.

    For /?

    dentro i batch se usi il for, dovrai raddoppiare i per cento  %%, in una finestra cmd solo  uno %

    Il seguente batch è molto molto simile alla riga di robocopy! (System Volume Information in più)

    @echo off
    setlocal
    set filetrovati=c:\temp\file_da_cancellare.cmd.txt
    type NUL>"%filetrovati%"
    set "stop_un_po=(timeout 5) 2>NUL 1>NUL"
    rem  set  "stop_un_po="
    set root=c:\
    set "esclusisempre=\\appdata\\ \\onedrive\\"
    set "esclusi=Program\ files programdata windows System\ Volume\ Information" 
    Echo ---- elenco le directory escluse:
    dir /b /ad %root% |findstr /i   "%esclusi%"
    echo ----------------------start---%time%--------------------------------
    %stop_un_po%
    pushd %root% || goto :EOF
    For /f "tokens=*" %%D in ('dir /b /ad %root% ^|findstr /i /v  "%esclusi%"') do (
        pushD %root%%%D 2>NUL 1>NUL || (echo errore nell'accesso a %%D & %stop_un_po%)
    	for /f "tokens=*" %%F in ('dir /s /b /a-d  *.jpg *.mp4 *.avi *.mp3 2^>NUL ^| findstr /i /v "%esclusisempre%"  2^>nul ') do (
       		echo del /q /f "%%F" >>"%filetrovati%"
    	)
    )
    echo ----------------------end---%time%--------------------------------
    "%filetrovati%"
    

    Se ti posso dare un consiglio, usa powershell,

    ha una programmazione più lineare, sei al passo coi tempi,

    tanti libri ti possano accopmpagnare, i batch puri sono ostici..

    Ciao Gas



    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere





    neděle 24. listopadu 2019 22:13
    Moderátor
  • Salve Gas, hai ragione per quanto riguarda Powershell!!! :-) Dovrò incominciare a valutarlo per stare al passo con i tempi!!! :-)

    Comunque il tuo script mi sembra perfetto per il mio scopo, ci avevo pensato alla possibilità di creare una lista di file su txt tramite dir ma non riuscivo a collegarla al del, come invece hai fatto tu.

    faccio qualche test e poi ti faccio sapere.... :-)

    Intanto grazie e ti auguro una serena giornata!! :-)

    Umberto

    • Označen jako odpověď Umberto DP pondělí 9. prosince 2019 17:08
    • Zrušeno označení jako odpověď Umberto DP pondělí 9. prosince 2019 17:27
    pondělí 25. listopadu 2019 10:34
  • Salve Gastone, ho fatto un bel pò di test ed il tuo batch funziona alla grande!!!

    Apportando alcune modifiche per fargli estendere la ricerca anche ai file della root e su presunte altre partizioni del disco, ora è perfetto, escludendo anche il pagefile.sys ed altre cartelle di sistema.

    l'ho già applicato ad un Server ed a due client e sto monitorando giornalmente i risultati che direi molto soddisfacenti.

    Grazie di tutto!!!! e buone future feste!!!! :-)

    pondělí 9. prosince 2019 17:27