PDA

Visualizza versione completa : copia parametrica


sacarde
13-10-2001, 19.24.18
Ho un'applicazione che giornalmente scrive un file in una cartella.
Avrei bisogno di copiare questo file e inserire nel nome la data per archiviarlo, pensate si possa fare in modo automatico prendendo la data dal sistema?
es:
datibackup.xxx -----------------------> datibackup_al_GG_MM_AA.xxx

Ho provato in Basic, non è possibile dare nomi di file dinamici.
Ho provato in Cobol, non è possibile dare nomi di file dinamici.
Ho provato in DOS, non sono riuscito a usare il paremetro DATA .

grazie

badmood
16-10-2001, 11.34.39
Smanetta come più ti pare:

Lancia il notepad e scrivi
' ---------------------------------
Dim fso
Dim data, nuovo_nome, richiesta, esegui
Set fso = CreateObject("Scripting.FileSystemObject")
data = now()
nuovo_nome = "c:\temp\" & mid(data, 1, 2) & "_" & mid(data, 4, 2) & "_" & mid(data, 7, 4) & ".xxx"
richiesta = "Eseguo la rinomina in " & nuovo_nome & "? (s/n)"
esegui = InputBox(richiesta, "Rinomina File")
if esegui="s" or esegui="S" Then
fso.CopyFile "c:\temp\datibackup.xxx", nuovo_nome
end if
' ---------------------------------
Salva il tutto con estensione .vbs e vai come un fulmine. Questo copia e non rinomina, solo per poter mantenere il backup con il nome originale nel caso servisse.

Ciao

sacarde
16-10-2001, 19.43.57
(rimango stupito!!!)
grazie infinite, è proprio quello che cercavo !!!

ma, mi sorge una domanda...........che linguaggio è?
VisualBasicScript ? (credevo si usasse nelle pagine HTML)

e chi me lo ha installato?

Billow
17-10-2001, 08.25.01
Bad posso aprofittare di te ???

per fare la stessa identica cosa con un intera cartella

es. pratico :
c:\documenti\fatture


che deve essere copiato in un disco di rete
I:\backup\ditta\fatture...


basta cambiare i parametri
nuovo_nome = "c:\temp\" & mid(data, 1, 2) & "_" & mid(data, 4, 2) & "_" & mid(data, 7, 4) & ".xxx"

e

fso.CopyFile "c:\temp\datibackup.xxx", nuovo_nome
?????



grazie in anticipo ;)

a me tornerebbe ULTRA utile

badmood
17-10-2001, 11.12.03
Il linguaggio viene installato assieme a Windows (dal 98 in poi, mi sembra), e si chiama Windows scripting host.
Per quanto riguarda la copia di intere cartelle non ho mai provato, dovrei controllare ma non penso sia un problema, utilizzando il metodo giusto. Se trovo qualcosa ti faccio sapere, in questo momento sono leggermente preso dal mio lavoro ufficiale :D

Ciao

PS: penso di poterti rispondere nel pomeriggio, se tutto va bene.

badmood
17-10-2001, 11.18.12
Billow, tu vuoi copiare il contenuto cambiando il nome ad ogni file?
Tipo:
c:\temp\file1.xxx
c:\temp\pippo2.xxx

in

i:\fatture\file1_data.xxx
i:\fatture\pippo2_data.xxx

Fammi sapere

Ciao

Billow
17-10-2001, 12.48.21
esatto ;)

devo semplicemente fare il backup in rete deli docs + importanti della ditta...

ora questo avviene con explorer.... con copia incolla...
sarebbe bellissimo avere un icona sul desktop che può essere premuta da qualsiasi persona per fare un backup atuomatico.. ;)

badmood
17-10-2001, 14.03.21
Ti andrebbe meglio un salvataggio in una directory del server con la data, del tipo I:\backup\ditta\fatture_data

Cosa ne dici? Così poi ti mando lo script.

Ciao

Billow
17-10-2001, 14.23.10
na manna !!!!!.

MAGARI :) :)

badmood
17-10-2001, 14.35.47
Dammi un attimo, che lo provo e poi spedisco. Comunque sarà da adattare alle tue esigenze e ti spiegherò cosa modificare.

A dopo.

Ciao

badmood
17-10-2001, 15.31.07
' Copia di file con creazione cartella su drive remoto

' per i test togliere l'on error
on error resume next

Dim fso, foldername, netmap
Dim data, nuovo_nome, richiesta, esegui, nuovo_folder, nuovo_map

Set fso = CreateObject("Scripting.FileSystemObject")
' giro la data in formato aaaa_mm_gg per migliore ordinamento
data = now()
nuovo_map = "I:\"
nuovo_nome = mid(data, 7, 4) & "_" & mid(data, 4, 2) & "_" & mid(data, 1, 2)
nuovo_folder = nuovo_map & nuovo_nome

richiesta = "Eseguo la copia nel folder " & nuovo_nome & "? (s/n)"
esegui = InputBox(richiesta, "Copia File")

if esegui="s" or esegui="S" Then
Set netmap = WScript.CreateObject("WScript.Network")

' eseguo la mappatura (ma se esiste già allora si può togliere questa istruzione)
netmap.MapNetworkDrive nuovo_map, "\\nome_server\backup\ditta\fatture"

' creo il folder con nome uguale alla data odierna
Set foldername = fso.CreateFolder(nuovo_folder)

' PS: non copia le eventuali sottocartelle (bisognerebbe usare il metodo fso.CopyFolder)
fso.CopyFile "c:\documenti\fatture\*", nuovo_folder
end if

Non avendo le tue mappature ho provato un po' a tentoni... Se hai la lettera I: già correttamente mappata togli l'istruzione contrassegnata. Viene creato un folder dentro a I:\ con data (ad es: 2001_10_17) nel formato invertito in modo da avere un ordinamento congruente. Se ci sono problemi dimmelo.

Ciao

PS: se usi fso.CopyFolder allora prima dell'istruzione devi aggiungere nuovo_folder = nuovo_folder & "\"
E' utile per l'appunto perché ti copia in modo ricorsivo anche le sottocartelle.

sacarde
18-10-2001, 18.18.55
oltre alla documentazione sul sito Microsoft, esiste qualcosaltro sul Windows Script Host ?

grazie infinite

p.s. sul mio PC le estenzioni .vbs .wsf e .js utilizzano il programma WSCRIPT.EXE, quindi non ci dovrebbero essere differenze al momento dell'esecuzione; nel tuo primo esempio questo però non è vero!!!(?)

badmood
19-10-2001, 10.27.16
Ho fatto riferimento al sito MS perché in giro in effetti non si trovano quick reference scaricabili (almeno non ne ho trovate). E poi a me il vb in generale non piace e quindi ho una repulsione personale per tale linguaggio, anche se nella versione di script ti lascia fare un sacco di cose utili... e può sempre far comodo.

Anche a me usa wscript.exe per eseguirli... in che senso nel mio primo esempio non è vero?

Ciao

sacarde
20-10-2001, 10.24.06
nei tuoi due esempi descritti sopra, con l'estenzioni vbs funziona, usando le altre due estezioni da errore, es.:

----------------------------------------------------------------------------
Script c:\abc\ccc.wsf
riga 11
Carattere 2
errore: riferimento al'entità senza terminazione. Impossibile trovare l'elemento ';' corrispondente
Codice 80040008
Origine Windows Script Host
-----------------------------------------------------------------------------

dove il sorgente è:

Dim fso
Dim data, nuovo_nome, richiesta, esegui
Set fso = CreateObject("Scripting.FileSystemObject")
data = now()
nuovo_nome = "c:\abc\" & mid(data, 1, 2) & "_" & mid(data, 4, 2) & "_" & mid(data, 7, 4) & "backup.txt"
richiesta = "Eseguo la rinomina in " & nuovo_nome & "? (s/n)"
esegui = InputBox(richiesta, "Rinomina File")
if esegui="s" or esegui="S" Then
fso.CopyFile "c:\abc\datibackup.txt", nuovo_nome
end if

ci deve essere un'istruzione che gli dice di interpretarlo come wsf o come vbs o come js

cmq con .vbs funziona perfettamente

ciao

badmood
20-10-2001, 10.44.44
In realtà mi sembra che le estensioni valide siano solo .vbs e .js però... in ogni caso se vuoi un riferimento ai comandi prova qui
http://www.devguru.com/Technologies/wsh/quickref/wsh_index.html

Ciao