Scrivere un file batch per la copia di file su base cronologica
-
18-09-2019 - |
Domanda
ho bisogno di fare un file batch in grado di copiare i file da un percorso a un altro sulla base di parametri.
Ad esempio, digitando "datecopy -m 8 c: / CopyFrom /*.* d: / CopyTo /*.*", avrebbero trovato tutti i file in C: / CopyFrom datata meno di 8 mesi di età, e copiarli d: / CopyTo -cartella. In alternativa, invece di -m per mese, potrei usare -h per un'ora o -y per l'anno.
Non è questo il programma completo, naturalmente, ma dovrebbe fatemi parlare. Grazie per eventuali suggerimenti. :)
Soluzione
So che questo potrebbe non sembrare come se fosse rispondere alla tua domanda, ma salva te stesso più dolore e di angoscia di quanto si possa immaginare in questo modo in JScript o VBScript
Ultimamente sto guardando Windows PowerShell , in fondo Windows Scripting sulla velocità.
Tuttavia si può essere certi che Windows Script Host (JScript e VBScript) è già in Windows da XP in poi (possibilmente da W2k in poi).
Il mio consiglio è di non utilizzare le finestre comandi batch.
Altri suggerimenti
Supponendo che è possibile assemblare una serie di strumenti buon vecchio-unix, si prendono uno sguardo al programma di utilità find
. Ha le opzioni si chiede per, e altro ancora.
find c:/copy/from -atime 240 | xargs cp "{}" c:/copyto
Ecco uno script che copiare i file più recenti di 8 mesi.
# Script TimedCopy.txt
var str from, to, timediff, list, file
lf -n "*" $from ($ftype=="f") AND ($fmtime > addtime(diff(("-"+$timediff)))) > $list
while ($list <> "")
do
lex "1" $list > $file
system copy ("\""+$file+"\"") ("\""+$to+"\"")
done
Il comando lf (file di elenco) è abbastanza flessibile. La sua pagina di aiuto è a http://www.biterscripting.com/helppages/lf.html.
Per eseguire lo script, copiare e incollare lo script in file C:. /Scripts/TimedCopy.txt, avviare biterscripting ed eseguire il comando
script "C:/Scripts/TimedCopy.txt" from("c:/copyfrom") to("d:/copyto") timediff("240000000")
Spiegazione dell'argomento TimeDiff
"240000000" significa 240 giorni, 00 ore, 00 minuti, 00 secondi
"120000" significa 12 ore, 00 minuti, 00 secondi
"3000" significa 30 minuti, 00 secondi
"30" significa 30 secondi
ecc.
(Per datato, presumo vuoi dire modificato. Se si intende creato, utilizzare $ fctime invece di $ fmtime nello script.)
Spero che questo aiuti.