Pagina 1 di 1

Batch sposta file

Inviato: mer ott 11, 2017 1:58 pm
da aik01
Ciao ragazzi,
dovrei creare un batch che su un server locale X: che abbia sottocartelle X:\folder\folder2 etc.
prenda tutti i file presenti in X:\folder\folder2\folder3\folder4\PROGETTO con data creazione > 90gg e li sposti in una cartella X:\folder\folder2\folder3\folder4\PROGETTO\OLD
avete qualche cosa dalla quale si possa partire?

Re: Batch sposta file

Inviato: mer ott 11, 2017 2:58 pm
da PippoDJ
Ciao aik01,

Codice: Seleziona tutto

FORFILES /P X:\folder\folder2\folder3\folder4\PROGETTO /D -90 /C "cmd /c move @file X:\folder\folder2\folder3\folder4\PROGETTO\OLD"
dove:
  • /P = il percorso in cui deve essere effettuata la ricerca dei file,
  • /D = l'età dei file espressa in giorni,
  • /C = il comando da eseguire per ogni elemento della lista di file [@file] risultante in base al criterio di ricerca, racchiuso tra virgolette.
N.B. 1: La ricerca viene effettuata solo tra i file presenti nella cartella indicata dal percorso, non nelle sottocartelle.
N.B. 2: La data di riferimento per la ricerca non è quella di "creazione", ma quella di "ultima modifica".

Ciao, Pippo.

Re: Batch sposta file

Inviato: mer ott 11, 2017 3:11 pm
da aik01
Ciao Pippo,
ho un'alberatura di questo tipo:
X:\folder1\folder2 fisse mentre folder3\folder4 possono cambiare pensi si possa fare qualcosa di automatico?

tipo:
x:\città\quartiere\via_rossi\numero1\FAMIGLIA
x:\città\quartiere\via_blu\numero21\FAMIGLIA
x:\città\quartiere\via_blu\numero55\FAMIGLIA
x:\città\quartiere\via_blu\numero78\FAMIGLIA
x:\città\quartiere\via_neri\numero22\FAMIGLIA

Re: Batch sposta file

Inviato: mer ott 11, 2017 5:49 pm
da PippoDJ
Sì certo, si può fare, ma in questo caso diventa più semplice ricorrere a ROBOCOPY:

Codice: Seleziona tutto

ROBOCOPY /S x:\città\quartiere\ x:\città\quartiere_OLD\ /MINAGE:90 /MOVE
dove:
  • /S = attiva l'opzione di ricerca dei file anche nelle sottocartelle,
  • /MINAGE: = l'età minima dei file su cui intervenire espressa in giorni,
  • /MOVE = attiva l'operazione di "spostamento" invece della "copia".
N.B.: In questo caso è importante che la cartella OLD non sia una sottocartella del percorso base (come avevi ipotizzato nel primo post), altrimenti verrebbe sottoposta anch'essa allo spostamento dopo 90 giorni dalla creazione con risultati... imprevedibili.

Ciao, Pippo.

Re: Batch sposta file

Inviato: mer ott 11, 2017 6:04 pm
da aik01
Ciao Pippo, mi spiego meglio (probabilmente non l'ho fatto prima:
x:\città\quartiere\via_rossi\numero1\FAMIGLIA contiene N file di cui N-10 con ultima modifica > 90
x:\città\quartiere\via_blu\numero21\FAMIGLIA contiene N file di cui N-10 con ultima modifica > 90
x:\città\quartiere\via_blu\numero55\FAMIGLIA contiene N file di cui N-10 con ultima modifica > 90
x:\città\quartiere\via_blu\numero78\FAMIGLIA contiene N file di cui N-10 con ultima modifica > 90
x:\città\quartiere\via_neri\numero22\FAMIGLIA contiene N file di cui N-10 con ultima modifica > 90

questo quello atteso:
x:\città\quartiere\via_rossi\numero1\FAMIGLIA contiene N-10 file
x:\città\quartiere\via_rossi\numero1\FAMIGLIA\OLD contiene 10 con ultima modifica > 90
==============================================================================
x:\città\quartiere\via_blu\numero21\FAMIGLIA contiene N-10 file
x:\città\quartiere\via_blu\numero21\FAMIGLIA\OLD contiene 10 con ultima modifica > 90
==============================================================================


grazie ancora :)

Re: Batch sposta file

Inviato: gio ott 12, 2017 11:47 am
da PippoDJ
La faccenda si complica parecchio... soprattutto a causa di questo:
PippoDJ ha scritto:N.B.: In questo caso è importante che la cartella OLD non sia una sottocartella del percorso base (come avevi ipotizzato nel primo post), altrimenti verrebbe sottoposta anch'essa allo spostamento dopo 90 giorni dalla creazione con risultati... imprevedibili.
diventa necessario impostare un ciclo sulle sottocartelle e filtrare solo i percorsi che terminano con "FAMIGLIA".

Questa una possibile soluzione:

Codice: Seleziona tutto

FOR /F %%A IN ('dir /B /S /AD x:\città\quartiere\') DO CALL :sposta %%A
:sposta
SET B=%1
IF /I FAMIGLIA==%B:~-8% ( ROBOCOPY %1 %1\OLD\ /MINAGE:90 /MOVE)
:END
Ciao, Pippo.

Re: Batch sposta file

Inviato: gio ott 12, 2017 10:32 pm
da aik01
grazie mille della dritta domani la provo subito! Un info... partendo da zero come potrei imparare a costruire da solo questi batch? Vedo anche che è utilizzato pure powershell (non vorrei andare in OT ma è una curiosità)

Re: Batch sposta file

Inviato: sab ott 14, 2017 3:53 pm
da aik01
ciao Pippo,
ho provato il batch eseguendo un check pre-post lancio estraendo la lista delle cartelle dell'albero tramite DIR /A:d /B /S *.* > estrai.txt - idee?

Re: Batch sposta file

Inviato: sab ott 14, 2017 5:41 pm
da PippoDJ
aik01 ha scritto:ho provato il batch eseguendo un check pre-post lancio estraendo la lista delle cartelle dell'albero tramite DIR /A:d /B /S *.* > estrai.txt - idee?
Scusa, ma quale sarebbe la domanda? :s

Re: Batch sposta file

Inviato: lun ott 16, 2017 8:39 am
da aik01
ho estratto l'alberatura delle cartelle con il comando: DIR /A:d /B /S *.* > estrai.txt

Ho poi lanciato il batch che mi avevi indicato e nuovamente il comando sopra per vedere se l'alberatura:
x:\città\quartiere\via_rossi\numero1\FAMIGLIA
conteneva x:\città\quartiere\via_rossi\numero1\FAMIGLIA\OLD
anche dove mi aspettassi che la cartella OLD fosse visibile - volevo chiederti se il codice del batch ti tornava o se magari ci fosse stato un errore da qualche parte;

Grazie

Re: Batch sposta file

Inviato: lun ott 16, 2017 10:31 am
da PippoDJ
Ottieni qualche messaggio di errore?

Ad ogni modo, con tutta probabilità, il problema è nel carattere accentato presente nel percorso di base [x:\città\quartiere\].

Usare caratteri accentati nei nomi di file e cartelle è sempre una pessima idea: quindi il consiglio è di rinominare la cartella "città" in "citta" e modificare il batch di conseguenza.
Se non è possibile farlo senza compromettere il funzionamento di altre applicazioni coinvolte, prova a cambiare la tabella dei codici ANSI aggiungendo all'inizio del batch il comando CHCP 1252:

Codice: Seleziona tutto

CHCP 1252
FOR /F %%A IN ('dir /B /S /AD x:\città\quartiere\') DO CALL :sposta %%A
:sposta
SET B=%1
IF /I FAMIGLIA==%B:~-8% ( ROBOCOPY %1 %1\OLD\ /MINAGE:90 /MOVE)
:END
Ciao, Pippo.

P.S.: Quando tutto funziona, il batch crea una cartella OLD sotto ogni cartella di nome FAMIGLIA, a prescindere che quest'ultima contenga file da spostare più vecchi di 90 giorni o no.

Re: Batch sposta file

Inviato: lun ott 16, 2017 10:07 pm
da aik01
Ciao Pippo,
ti ringrazio, l'esempio che ti avevo riportato era solo un esempio - correttamente però città con l'accento era fuorviante :)
Domani rifaccio un giro e ti dico!

Re: Batch sposta file

Inviato: lun ott 16, 2017 10:28 pm
da aik01
Già testato.... grande! :)!